问题是fgets在循环的第一次迭代中没有取任何值。只是简单地跳过它。照我看来。我的代码中存在一些基本错误,但我没有看到它。 Fgets仅在2d迭代时开始获取值。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main(void)
{
int t;
scanf("%i", &t);
char ways[100];
for (int j = 0; j <= t; t++)
{
fgets (ways, 100, stdin);
printf("Ways = %s\n", ways);
}
return 0;
}`
答案 0 :(得分:1)
解决问题的最简单方法是使用fgets()
和sscanf()
来读取初始数字。此外,您的循环似乎有几个错误。您可能意味着j < t
而不是j <= t
,因此循环执行t
次。此外,您几乎肯定会增加j
而不是t
,这会导致无限循环。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main(void)
{
int t;
char buffer[100];
fgets(buffer, 100, stdin);
sscanf(buffer, "%i", &t);
char ways[100];
for (int j = 0; j < t; j++)
{
fgets (ways, 100, stdin);
printf("Ways = %s\n", ways);
}
return 0;
}
请注意,在格式字符串的末尾添加空格字符通常是个坏主意,因为这会导致scanf()
继续尝试读取输入,直到遇到非空白字符为止,阻止输入。
答案 1 :(得分:-2)
scanf()正在读取uder输入的数字,并将其尾随空格和换行符留在缓冲区中。 fgets()然后读取这些,因此看起来在第一次迭代时读取一个空字符串。
要修复在%i后添加空白字符。空格将空格与scanf匹配。