无法通过 fgets() 从输入中正确读取整数
Unable to properly read integers from input via 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
您的输入数组不够大。
如果您输入一个数字,则该数字和一个换行符在输入缓冲区中。然后 fgets
将 1 个字符(即 2 - 1)读入缓冲区(因为这就是所有适合的字符)并添加空终止符。所以换行符留在缓冲区中。
使 ar
缓冲区足够大以存储您可能输入的任何数字加上换行符的空间。尺寸 10 应该足够了。
我目前正在练习读取用户输入,我正在使用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
您的输入数组不够大。
如果您输入一个数字,则该数字和一个换行符在输入缓冲区中。然后 fgets
将 1 个字符(即 2 - 1)读入缓冲区(因为这就是所有适合的字符)并添加空终止符。所以换行符留在缓冲区中。
使 ar
缓冲区足够大以存储您可能输入的任何数字加上换行符的空间。尺寸 10 应该足够了。