我的问题是,我不确定字符比较在这个特定代码中是如何工作的:

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/

10-12 14:12
查看更多