0

我想测试我用 fgets() 读取的字符串是“新”还是“重复”。如果它是重复的,它应该如何工作,但如果它是“新的”,它就不起作用。有谁知道为什么?

    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");

        }
    }
4

1 回答 1

4

的行为fgets()是:

从给定的文件流中最多读取 count - 1 个字符并将它们存储在 str 中。生成的字符串始终以 NULL 结尾。如果出现文件结尾或找到换行符,则解析停止,在这种情况下 str 将包含该换行符。

If "repeat"is enterrepeatornew不包含换行符,因为它只有6字符空间和终止空字符。如果"new"输入repeatornew则将包含换行符并且strcmp()将失败。

要确认此行为,请打印以下repeatornew内容fgets()

if (fgets(repeatornew,7,stdin))
{
    printf("[%s]\n", repeatornew);
}

要更正,请增加repeatornew数组的大小并在字符串文字中包含换行符以进行比较,或者从数组中删除换行符(repeatornew如果存在)。

于 2013-06-25T08:15:23.920 回答