用fgets读取输入?

时间:2014-04-07 09:29:09

标签: c fgets

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

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

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

3 个答案:

答案 0 :(得分:1)

man fgets

  

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

     

fgets() stream 中读取最多一个 size 字符并且   将它们存储到 s 指向的缓冲区中...   终止空字节(' \ 0')存储在最后一个字符之后   缓冲区。

size 1的情况下,这意味着 fgets()读入零,i。即不,字符和存储终止' \ 0'在test[0]

答案 1 :(得分:0)

strcmp按字母顺序对字符串进行操作,因此test必须是\0终止字符串。 test必须有\0的空间。

答案 2 :(得分: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){
   ......
   ......
}