带fgets的strcmp不能正常工作
我想测试用fgets()读取的字符串是“新建”还是“重复”。如果它是重复的,它应该如何工作,但如果它是“新的”,它就不工作。有人知道为什么吗带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",
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);
}