我目前正在练习从用户那里读取输入,我正在使用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循环自动运行两次。
编辑:
输入:

输出(自动):
我是0
我是1

最佳答案

你的输入数组不够大。
如果输入一个数字,则该数字和换行符在输入缓冲区中。然后fgets将1个字符(即2-1)读入缓冲区(因为这是所有适合的字符)并添加空终止符。所以换行符留在缓冲区中。
ar缓冲区设置得足够大,以存储您可能输入的任何数字,并将房间设置为换行符。10号就够了。

关于c - 无法通过fgets()从输入中正确读取整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36877907/

10-11 22:05
查看更多