读取循环内的多个用户输入字符串

kpa*_*ark 1 c


我目前正在尝试解决CodeChef中的问题,但我在循环中使用fgets()时遇到了麻烦.

第一个输入(T)将是一个包含用户输入数量的正整数.
然后由换行符分隔,用户将在任何情况下输入长度为10的字符串.

所以,我试过这个:

#include <stdio.h>
#include <stdlib.h>

#define SIZE 10

int main()
{
    int T;
    int diffX, diffY;
    char s[SIZE];

    scanf("%d", &T);

    while (T--){
        fgets(s, SIZE, stdin);
        printf("%s\n", s);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用以下输入测试代码时:

3
您好

什么

我只能输入"Hi",然后程序退出成功(返回0).

为什么会这样,我该如何解决?

提前谢谢你,
kpark.

jxh*_*jxh 5

fgets()消耗第一次通话留下的新线scanf().因此,它消耗了3行,但第一行看起来像是fgets()你所拥有的循环的空行.

您可以通过使用fgets()获取第一行来解决此问题,并使用将字符串解析为数字sscanf().

fgets(s, SIZE, stdin);
sscanf(s, "%d", &T);
/* ... */
Run Code Online (Sandbox Code Playgroud)