input
我遇到了问题。如果我在strcmp()
变量中输入退出,则函数10
会返回0
,但它应返回Compare-Object
并退出程序退出等于退出。但事实并非如此。
我找不到问题。
答案 0 :(得分:8)
您得到10
,因为输入字符串中有换行符。 10
返回值是该换行符的ascii值与您要比较的"exit"
字符串文字的终止空字符之间的差异。
答案 1 :(得分:6)
函数fgets
还包括新行字符'\n'
,如果数组中有足够的空格,则对应于按下的Enter键。
您应该删除它,例如以下方式
fgets( input, SIZE, stdin );
input[strcspn( input, "\n" )] = '\0';
或更安全
if ( fgets( input, SIZE, stdin ) != NULL ) input[strcspn( input, "\n" )] = '\0';
考虑到这段代码
*strchr(input, '\n') = '\0';
通常无效,因为数组中可能缺少新的换行符,而strchr
函数将返回NULL
。
答案 2 :(得分:5)
fgets
在读入缓冲区的字符串末尾添加换行符(\n
)。
使用
删除它char* newline = strchr(input, '\n');
if (newline)
*newline = '\0';
As @WeatherVane mentioned,某些fgets
调用可能未在缓冲区中设置换行符,因此我们需要检查strchr
是否返回NULL
(未找到换行符)。< / p>
答案 3 :(得分:4)
fgets()
保留'\n'
。您可以将其从input
中删除(请参阅其他答案)或将其添加到文字
strcmp(input, "exit\n")