我的问题是,我不确定字符比较在这个特定代码中是如何工作的:
while (1) {
scanf("%c", &c);
if (c == 'c')
printf("working\n");
else {
printf("Not working\n");
break;
}
printf("not-not-working\n");
}
我感兴趣的是为什么这个程序的输出是:
如果我输入“c”,输出是:工作,不工作,不工作
如果我输入其他内容:不工作,不工作。
我的问题是,我可以比较这样的字符,还是必须使用
strcmp()
?这是如何工作的?
附言:我一直在寻找其他的答案和教程,但有点困在我自己的问题上。
最佳答案
原因是只要输入缓冲区中有字符,scanf就会返回。在按回车键之前缓冲区不会被刷新。
所以循环一直运行,直到缓冲区为空,或者到达break语句。
将代码更改为:
int main (int argc, char * argv[])
{
char c[BUFSIZ];
while(1){
scanf("%c",c);
fprintf(stderr,"Input was: '%c'\n",c[0]);
if(c[0] == 'c')
printf("working\n");
else
{
printf("Not working\n");
break; // This will exit the while loop if the character is not 'c'
}
printf("not-not-working\n"); // This will always print on every iteration
}
return 0;
}
输入“c”+[ENTER]时给出输出:
c
Input was: 'c'
working
not-not-working
Input was: '
'
Not working
您可以使用sscanf而不是scanf修复这个示例,然后只检查第一个字符c[0]。
关于c - C和Break中的字符比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20557296/