c - 带有 C 字符串的 scanf 和 strcmp

标签 c scanf strcmp c-strings

我找到了一个不错的 example关于如何使用 strcmp,但它只适用于 fgets(),我需要使其适用于 scanf。所以,这是代码:

int main(void) {
char fruit[] = "apple\n";
  char ans[80];
  do {
     printf ("Guess my favorite fruit? ");
     scanf ("%s",ans);
  } while (strcmp (fruit, ans) != 0);
  puts ("Correct answer!");
  return 0;
}

即使我写了正确的 answear(“apple”),它仍然在循环中并不断问我最喜欢的水果是什么......我猜它与未写在 ans 的字符有关[80](我需要它是一个最多 80 个字符的字符数组)。我没听懂...

提前致谢。

最佳答案

Scanf 会忽略“\n”,所以你应该初始化 char fruit[] = "apple",因为 ans 永远不会以 '\n' 结尾。

P.S:scanf 的解释:任意数量的非空白字符,在找到的第一个空白字符处停止。在存储序列的末尾自动添加终止空字符。

关于c - 带有 C 字符串的 scanf 和 strcmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20792246/

相关文章:

C:将 return 和 scanf() 合并在一行中

c - 让语言环境函数在 glibc 中工作

c - 字符串以换行符结尾的 strcmp

c - strcmp 可能实现不当

c - Mcrypt 库将结果写入文件

c - array[i+1] 与 array[i] 具有相同的值,即使它不应该

更改c语言中的输入文本颜色

c++ - sscanf() 无法正确识别格式

c - 为什么在 C 中为数组声明动态分配的内存和指向数组声明的指针不一样?

c - C程序读取硬件寄存器