我目前正在尝试解决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.
fgets()消耗第一次通话留下的新线scanf().因此,它消耗了3行,但第一行看起来像是fgets()你所拥有的循环的空行.
您可以通过使用fgets()获取第一行来解决此问题,并使用将字符串解析为数字sscanf().
fgets(s, SIZE, stdin);
sscanf(s, "%d", &T);
/* ... */
Run Code Online (Sandbox Code Playgroud)