Fgets - 不在循环中工作

时间:2017-02-15 18:34:32

标签: c loops fgets

问题是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; 
 }`

2 个答案:

答案 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匹配。