Error : Wrong comparison between pointer and integer
Error : Wrong comparison between pointer and integer
我的代码看起来没问题,但是我收到这个警告(警告:指针和整数之间的比较),解决这个问题的最佳方案是什么?
我已经对 (char exit = "E"
) 使用了双符号标记,也对 while 使用了相同的东西但同样的问题。
#include <stdio.h>
int main()
{
char c[1];
char exit = 'E';
while (c != exit)
{
printf("Enter a character\n\n");
scanf("%s", c);
printf("your character is : %s\n-------------------\n", c);
}
}
我相信这就是你想要做的。
警告是因为你没有初始化你的角色,而且你正在比较角色的地址和角色值。
#include <stdio.h>
int main()
{
char c[1];
char exit = 'E';
while ((c[0]=getchar()) != exit)
{
if(c[0]==EOF)break;
printf("your character is : %c\n",c[0]) ;
}
printf("ended");
}
#include <stdio.h>
int main()
{
char c[1];
char exit = 'E';
while (c != exit) // here ...
{
printf("Enter a character\n\n");
scanf("%s", c);
printf("your character is : %s\n-------------------\n", c);
}
}
您正在尝试将 char
与数组 c
衰减到的指针进行比较。您可能想要做的是将数组的第一个字符与字符 exit
:
进行比较
while (c[0] != exit)
但这仍然没有多大意义,因为 c
未初始化并且用户还没有机会进行任何输入。最好使用 do ... while
循环:
#include <stdio.h>
int main()
{
char c[1];
char exit = 'E';
do {
printf("Enter a character\n\n");
scanf("%s", c);
printf("your character is : %s\n-------------------\n", c);
} while (c[0] != exit);
}
接下来的事情是,scanf("%s", c);
可能会失败(是的,不太可能,但有可能)。并且用户可以输入比数组 c
中的空间更多的字符。永远不要在不检查 return 值的情况下使用 scanf()
,也不应在不为转换说明符指定 WIDTH
的情况下使用 "%s"
来限制放入数组的字符。
当读取字符串时,您需要存储 WIDTH
个字符 + 终止符 '[=26=]'
。所以如果你想读取一个字符的字符串,数组必须至少有 2 个元素:
#include <stdlib.h
#include <stdio.h>
int main()
{
char c[2];
char exit = 'E';
do {
printf("Enter a character\n\n");
while (scanf("%1s", c) != 1 ) {
fputs("Input error!\n");
return EXIT_FAILURE;
}
printf("your character is : %s\n-------------------\n", c);
} while (c[0] != exit);
}
但是如果你只想读一个字符,你最好使用 getchar()
:
#include <stdio.h>
{
int ch;
while (printf("Enter a character\n\n"),
(ch = getchar()) != EOF && ch != 'E')
{
printf("your character is: %c\n-------------------\n", (char) ch);
}
}
我的代码看起来没问题,但是我收到这个警告(警告:指针和整数之间的比较),解决这个问题的最佳方案是什么?
我已经对 (char exit = "E"
) 使用了双符号标记,也对 while 使用了相同的东西但同样的问题。
#include <stdio.h>
int main()
{
char c[1];
char exit = 'E';
while (c != exit)
{
printf("Enter a character\n\n");
scanf("%s", c);
printf("your character is : %s\n-------------------\n", c);
}
}
我相信这就是你想要做的。
警告是因为你没有初始化你的角色,而且你正在比较角色的地址和角色值。
#include <stdio.h>
int main()
{
char c[1];
char exit = 'E';
while ((c[0]=getchar()) != exit)
{
if(c[0]==EOF)break;
printf("your character is : %c\n",c[0]) ;
}
printf("ended");
}
#include <stdio.h> int main() { char c[1]; char exit = 'E'; while (c != exit) // here ... { printf("Enter a character\n\n"); scanf("%s", c); printf("your character is : %s\n-------------------\n", c); } }
您正在尝试将 char
与数组 c
衰减到的指针进行比较。您可能想要做的是将数组的第一个字符与字符 exit
:
while (c[0] != exit)
但这仍然没有多大意义,因为 c
未初始化并且用户还没有机会进行任何输入。最好使用 do ... while
循环:
#include <stdio.h>
int main()
{
char c[1];
char exit = 'E';
do {
printf("Enter a character\n\n");
scanf("%s", c);
printf("your character is : %s\n-------------------\n", c);
} while (c[0] != exit);
}
接下来的事情是,scanf("%s", c);
可能会失败(是的,不太可能,但有可能)。并且用户可以输入比数组 c
中的空间更多的字符。永远不要在不检查 return 值的情况下使用 scanf()
,也不应在不为转换说明符指定 WIDTH
的情况下使用 "%s"
来限制放入数组的字符。
当读取字符串时,您需要存储 WIDTH
个字符 + 终止符 '[=26=]'
。所以如果你想读取一个字符的字符串,数组必须至少有 2 个元素:
#include <stdlib.h
#include <stdio.h>
int main()
{
char c[2];
char exit = 'E';
do {
printf("Enter a character\n\n");
while (scanf("%1s", c) != 1 ) {
fputs("Input error!\n");
return EXIT_FAILURE;
}
printf("your character is : %s\n-------------------\n", c);
} while (c[0] != exit);
}
但是如果你只想读一个字符,你最好使用 getchar()
:
#include <stdio.h>
{
int ch;
while (printf("Enter a character\n\n"),
(ch = getchar()) != EOF && ch != 'E')
{
printf("your character is: %c\n-------------------\n", (char) ch);
}
}