C 使用fgets读取输入?

C 使用fgets读取输入?,c,fgets,C,Fgets,我正在尝试使用fgets()获取一个字符的输入。据我所知,除非没有空间,否则fgets将把\n加到输入的末尾 char test[1]; fgets(test,1,stdin); readRestOfLine(); while (strcmp(test,"z") != 0){ ...... ...... } 无论如何,即使输入z,循环也不会运行。这是为什么?strcmp根据其名称对字符串进行操作,因此test必须是\0终止的字符串测试必须有空间容纳\0 正如您正确指出的那样,fgets在字符串

我正在尝试使用fgets()获取一个字符的输入。据我所知,除非没有空间,否则fgets将把\n加到输入的末尾

char test[1];
fgets(test,1,stdin);
readRestOfLine();
while (strcmp(test,"z") != 0){
......
......
}

无论如何,即使输入z,循环也不会运行。这是为什么?

strcmp
根据其名称对字符串进行操作,因此
test
必须是
\0
终止的字符串<代码>测试必须有空间容纳
\0

正如您正确指出的那样,
fgets
在字符串末尾追加一个“\n”。因此,如果只输入“z”,则生成的字符串将是“z\n”,它不等于“z”

此外,
fgets
的缓冲区大小在程序中仅为字符长度,但该长度必须至少与要输入的最长字符串一样长

试试这个:

char test[100];   // space for 98 characters + \n + terminating zéro
fgets(test, 100, stdin);
readRestOfLine();
while (strcmp(test,"z\n") != 0){
   ......
   ......
}
manfgets

char*fgets(char*s,int-size,FILE*stream)

fgets()从流和流中最多读取一个小于大小的字符 将它们存储到s指向的缓冲区中。。。 终止的空字节('\0')存储在中的最后一个字符之后 缓冲区

在大小为1的情况下,这意味着fgets()读取为零,即。E否,输入字符并将终止“\0”存储在
测试[0]