我找到了一个很好的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数组)。我没有得到这个......
提前致谢。
答案 0 :(得分:3)
Scanf将忽略“\ n”,因此您应该初始化char fruit[] = "apple"
,因为ans永远不会以'\ n'结尾。
P.S:scanf的解释:任意数量的非空白字符,停在找到的第一个空白字符处。在存储序列的末尾会自动添加一个终止空字符。
答案 1 :(得分:1)
scanf()
不会将尾随换行符写入ans
。 strcmp()
确实会在比较中考虑换行符,因此它与您的文字(包括换行符)不匹配。
答案 2 :(得分:0)
“scanf”确实将换行符“\ n”作为输入。所以你无法使两个字符串相等。如果你想要两个字符串相等,你需要从第一个字符串中删除换行符“\ n”(“苹果”很好)。