scanf和strcmp with c string

时间:2013-12-26 22:44:19

标签: 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(“苹果”),它也会停留在循环中并不断询问我最喜欢的水果......我猜它与未写在ans的字符有关[80](我需要它是一个最多80chars的char数组)。我没有得到这个......

提前致谢。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

scanf()不会将尾随换行符写入ansstrcmp()确实会在比较中考虑换行符,因此它与您的文字(包括换行符)不匹配。

答案 2 :(得分:0)

“scanf”确实将换行符“\ n”作为输入。所以你无法使两个字符串相等。如果你想要两个字符串相等,你需要从第一个字符串中删除换行符“\ n”(“苹果”很好)。