scanf和strcmp with c string

我找到了一个很好的例子 ,说明如何使用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数组)。 我不是这个……

提前致谢。

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

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

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

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