无法通过fgets()

时间:2016-04-26 23:59:15

标签: c input int fgets

我目前正在练习阅读用户的输入,我正在使用fgets来读取输入,但似乎有问题。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
    int N = 0;
    char ar[2];
    fgets(ar, 2, stdin);
    N = atoi(ar);
     char arr[N][22];

    // for loop automatically runs automatically
    for(int i = 0; i< N; i++){ 
            printf("i is %d\n", i);
            fgets(arr[i], 22, stdin);
    }
    return 0;
}

首先,我使用fgets读取整数,然后使用atoi将其转换为整数。然后使用该整数,我循环N次,但由于某种原因,似乎输入流中仍然存在一些东西,它导致我的for循环自动运行两次。

编辑:

输入:

5

输出(自动):

我是0

我是1

1 个答案:

答案 0 :(得分:3)

您的输入数组不够大。

如果输入单个数字,则该数字和换行符位于输入缓冲区中。然后fgets将1个字符(即2 - 1)读入缓冲区(因为所有这些都适合)并添加空终止符。所以换行符留在缓冲区中。

使ar缓冲区大到足以存储您可能输入的任何数字加上换行符。 10的大小应该足够好。