c - 无法通过 fgets() 从输入中正确读取整数

标签 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

最佳答案

您的输入数组不够大。

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

使 ar 缓冲区足够大以存储您可能输入的任何数字以及换行符的空间。大小为 10 就足够了。

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

相关文章:

java - 是否有 HTML5 输入电子邮件验证的 Java 实现?

C 程序读取输入

c - 使用 getch() 将 char 数转换为 int 时出现问题;

c - 变量变为 1

ios - __LP64__ 和 __arm64__ 在 Cocoa 中存在哪些定义可以在编译时区分平台?它们在哪里或如何定义?

c - C中typedef结构中的函数指针

c# - 将 NULL 从 VB6 窗口传递到 .NET 可空 Int32

c - 我正在尝试编写一个函数,从给定的链表中删除所有奇数元素并返回一个地址

jquery 不(或删除)专注于任何表单字段

java - 检查 nextInt() 中输入的十进制数