我想测试一下我用fgets()读取的字符串是“new”还是“repeat”。如果它是重复的,它应该如何工作,但如果它是“新的”它不起作用。谁知道为什么?
char repeatornew[7];
fgets(repeatornew,7,stdin);
if(strcmp("repeat",repeatornew) == 0)
{
puts("repeat it.");
}
else
{
if(strcmp("new",repeatornew) == 0)
{
puts("new.");
}
else
{
printf("Please repeat the input! \n");
}
}
答案 0 :(得分:5)
fgets()
的行为是:
最多读取计数 - 给定文件流中的1个字符并将它们存储在str中。生成的字符串始终以NULL结尾。如果发生文件结束或找到换行符,则解析将停止,在这种情况下,str将包含该换行符。
如果输入"repeat"
,则repeatornew
不包含换行符,因为它只有6
个字符加上终止空字符的空间。如果输入"new"
,则repeatornew
将包含换行符,strcmp()
将失败。
要确认此行为,请在repeatornew
:
fgets()
的内容
if (fgets(repeatornew,7,stdin))
{
printf("[%s]\n", repeatornew);
}
要更正,请增加repeatornew
数组的大小,并在字符串文字中包含换行符以进行比较,或者从repeatornew
数组中删除换行符(如果存在)。