使用fgets的strcmp不能正常工作

时间:2013-06-25 08:13:07

标签: c if-statement fgets strcmp

我想测试一下我用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");

        }
    }

1 个答案:

答案 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数组中删除换行符(如果存在)。