2015-07-22 69 views
0

我想打印出一個新行上的每個整數,給出由用戶輸入的空白​​分隔的整數。它停止打印的具體數量後,可以說84例如使用while循環迭代通過用戶輸入,直到具體的數

用戶輸入

20 -4 84 8 

我怎麼能使用while循環打印出這些作爲

20 
-4 
84 

我知道關於scanf(「%d%d%d%d」,a,b,c,d),但輸入大小將是未知的,因此可能只有3個數字或7個數字。到目前爲止,我有:

#include <stdio.h> 

int main(void) 
{ 
    int i = 0; 
    int x = 0; 
    scanf("%d", &x); 
    while (x != 84) { 
     print("%d\n", x[i]); 
     i++; 
    } 
} 
+1

是什麼'num'?你想存儲以前的數字嗎? –

+0

抱歉編輯該問題。它是用戶輸入的'x'。無需存儲以前的數字,只需要打印它們 – Jack8246

回答

4

scanfwhile條件。喜歡的東西

while (scanf("%d", &x) != EOF && x != 84) 
    print("%d\n", x); 
+0

+1用於檢查scanf的返回值,以避免用戶輸入某些「%d」將不會掃描。 –

+0

謝謝,這正是我所需要的。你能向我解釋一下如何把scanf放在while條件下,與我在做什麼相比?我是C的新手,謝謝 – Jack8246

+0

@ Jack8246您掃描一次輸入並且一次又一次與'84'進行比較,掃描直到找到'84'。這是不同的。這也會檢查scanf是否正確讀取了要求的內容,在這裏是「int」。 – Shreevardhan

-1

你需要把scanf()while循環內,以更新每一個新的輸入。如果您只想打印輸入值,則不需要陣列,因爲您可以在新輸入後打印它。最好用do-while循環。

#include <stdio.h> 

int main(void) 
{ 
    int i = 0; 
    int x = 0; 

    do { 
     if (scanf("%d", &x) < 0) 
      break; 
     printf("%d\n", x); 
    } while (x != 84); 
} 
+0

如果EOF由scanf()返回,則此代碼將失敗 – user3629249

0

你有幾個誤區:

  • 陣列num不存在;
  • scanf必須在while循環中重複。

改正的代碼是THW如下:

#include <stdio.h> 

int main(void) 
{ 
    int x; 
    while(1){ 
     scanf("%d", &x); 
     print("%d\n", x); 
     if(x==84) break; 
    } 
} 
+0

陣列NUM應該是「X」,很抱歉,感謝您的回答 – Jack8246

+0

此答案几乎權利;。然而,OP表示的84是將被打印。所以'if()'語句和printf()語句需要交換。順便說一下:它是'printf'而不是'print'並且返回的值(不是參數值)也需要檢查,所以像用戶輸入不是數字,就像一個簡單的新的當返回的值不是1時,需要調用getchar()而不是調用printf(),並且如果返回的值是EOF,則需要退出循環和/或a ... z等。 – user3629249

+0

@ user3629249:true,已編輯 –

2

的基本概念應該是兩個步驟:

  1. 閱讀次數
  2. 檢查,並決定是否打印/繼續。

一個僞代碼看起來像

while ((ret =scanf(x)) && ret != EOF){ 
    if (x == VAL) break; 
    printf(x); 
}