fgets() 没有像我期望的那样工作

2023-12-01

谁能告诉我为什么这段代码不起作用?当我运行时,它只是打印出“输入有关线索 1 的信息”,并且没有任何输入,跳到另一个步骤。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 15

void readingArrays(int numberOfTrails,char arr[MAX][20]);

char array[MAX][20];

int main(void)
{
    int numberOfTrails;
    printf("Enter the number of trails\n");
    scanf("%d",&numberOfTrails);

    readingArrays(numberOfTrails,array);

    return 0;
}

void readingArrays(int numberOfTrails,char arr[numberOfTrails][20])
{
    for(int i=0;i<numberOfTrails;i++)
    {
        printf("Enter info about trails %d\n",i+1);
        fgets(arr[i],4,stdin);
        //getchar();
        //strtok(arr[i], "\n");
        printf("%s\n",arr[i]);
    }
}

Issue

main中的scanf函数读取整数,但保留换行符\n在输入流上。当第一次循环迭代时readingArrays来了,fgets看到这个换行符并假设您已经输入了您的踪迹信息并按下了 Enter 键。它打印空字符串和换行符,然后继续下一次迭代。

Solution

一种解决方案是告诉scanf通过在 %d 格式说明符后添加空格来读取并忽略数字后的空格。

所以要得到numberOfTrails从标准输入,你会做

scanf("%d ",&numberOfTrails);

感谢@Ray 指出这个解决方案!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fgets() 没有像我期望的那样工作 的相关文章

随机推荐