Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带fgets的strcmp不能正常工作_C_If Statement_Fgets_Strcmp - Fatal编程技术网

带fgets的strcmp不能正常工作

带fgets的strcmp不能正常工作,c,if-statement,fgets,strcmp,C,If Statement,Fgets,Strcmp,我想测试用fgets()读取的字符串是“新建”还是“重复”。如果它是重复的,它应该如何工作,但如果它是“新的”,它就不工作。有人知道为什么吗 char repeatornew[7]; fgets(repeatornew,7,stdin); if(strcmp("repeat",repeatornew) == 0) { puts("repeat it."); } else { if(strcmp("new",

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

        }
    }
其行为是:

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

如果输入了
“repeat”
repeatornew
不包含换行符,因为它只有
6
字符和终止的空字符的空间。如果输入了
“new”
,则
repeatornew
将包含换行符,
strcmp()
将失败

要确认此行为,请在
fgets()之后打印
repeatornew
的内容:

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

的行为是:

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

如果输入了
“repeat”
repeatornew
不包含换行符,因为它只有
6
字符和终止的空字符的空间。如果输入了
“new”
,则
repeatornew
将包含换行符,
strcmp()
将失败

要确认此行为,请在
fgets()之后打印
repeatornew
的内容:

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

定义“不起作用”。如果键入“repeat”,则会放入(“repeat it”);但是如果我键入“new”,如果没有printf(“请重复输入!\n!);那么strcmp(“new”,repeatornew)即使在我键入时也永远不会是1new@user2514164如果您键入“repeat”,您的程序还将读取在按enter键时生成的换行符。因此,您的程序将获得“repeat\n”。最后一个“\n”如果不在第一次fgets()调用中读取,则可能会在下一个循环中读取(并考虑数组中有多少空间,当发生这种情况时,如果输入“new”\n,则可能有空间用于定义“not work”。如果键入“repeat”,则会放入(“repeat it”);但是如果我键入“new”,如果没有printf(“请重复输入!\n!);那么strcmp(“new”,repeatornew)即使在我键入时也永远不会是1new@user2514164如果您键入“repeat”,您的程序还将读取在按enter键时生成的换行符。因此,您的程序将获得“repeat\n”。最后一个“\n”如果不在第一次fgets()调用中读取,则可能会在下一个循环中读取(请考虑数组中有多少空间,如果输入“new”\n,则可能会有空间容纳该循环)
if (fgets(repeatornew,7,stdin))
{
    printf("[%s]\n", repeatornew);
}