我的代码看起来不错,但是我得到了这个警告(警告:指针与整数之间的比较),解决此问题的最佳解决方案是什么?
我已经对(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);
}
}
答案 0 :(得分:0)
#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
所不能容纳的字符数。在未为转换说明符指定scanf()
来限制放入数组的字符的情况下,切勿使用"%s"
而不检查返回值或WIDTH
。
读取字符串时,您需要存储WIDTH
个字符和一个终止符'\0'
。因此,如果要读取一个字符的字符串,则数组必须至少包含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);
}
}
答案 1 :(得分:-1)
我相信这就是您要尝试做的事情。
警告是因为您尚未初始化字符,而且还正在将字符地址与字符值进行比较。
#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");
}