2017-02-15 69 views
0

問題是fgets在循環的第一次迭代中沒有取任何值。只需簡單地跳過它。照我看來。我在那裏有一些基本的錯誤,但我沒看到它。 Fgets只在2d迭代時開始取值。Fgets - 不能在循環中工作

#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

請修復您問題的格式。請注意,您的代碼中未包含#include。 –

+5

由於第一個'scanf'在輸入緩衝區中爲'fgets'離開'newline'來讀取 - 不要混用你的方法!用'fgets'和'sscanf'輸入't'。 –

+1

「在循環的第一次迭代中獲取並沒有任何價值」 - >是的。 'fgets()'「把''\ n''從前一行中取出。 – chux

回答

-2

的scanf()正在讀烏德輸入的數字,並留下他的尾隨空格和換行的緩衝。 fgets()然後讀取這些,並看起來在第一次迭代時讀取一個空字符串。

修復在%i之後添加空白字符。空格與scanf匹配空格。

+1

格式字符串末尾的空格將繼續匹配空白字符,直到遇到非空白字符,導致輸入掛起。 –

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()直到遇到非空白字符繼續嘗試讀取輸入,阻止輸入。