gpt4 book ai didi

c 和 break 中的字符比较

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:17 25 4
gpt4 key购买 nike

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

while (1) {
scanf("%c", &c);
if (c == 'c')
printf("working\n");
else {
printf("Not working\n");
break;
}
printf("not-not-working\n");
}

我感兴趣的是为什么这个程序的输出是:

  • 如果我输入“c”,输出是:working, not working, not-not-working
  • 如果我输入其他任何内容:not working, not-not-working。

我的问题是,我可以这样比较字符,还是必须使用 strcmp()?还有这个 break 是如何工作的?

PS:我搜索过其他答案和教程,但有点卡在我自己的问题上。

最佳答案

原因是只要输入缓冲区中有字符,scanf就会返回。并且在您按下 enter 之前不会刷新缓冲区。

因此您的循环一直运行到缓冲区为空,或者您点击了 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 和 break 中的字符比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20557296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com