2015-08-03 219 views
-1

while while循環不退出?while while(x!=' n')不會退出while循環不退出?

我想從用戶輸入一系列數字,然後逐個使用它們進行進一步處理。我沒有數字列表的大小。有人可以告訴我如何做到這一點?

#include<stdlib.h> 
#include<stdio.h> 

int main() 
{ 
    int x; 
    scanf("%d",&x); 
    while(x!='\n') 
    { 
     printf("%d",x); 
     scanf("%d",&x); 
    } 
    return 0; 
} 

實施例:

輸入:

3 5 6 

輸出:

3 5 6 

實際輸出:

3 5 6 

但循環不會退出

+4

首先,開始正確地格式化您的代碼。其次,請查閱'scanf'的文檔,第三,退出忽略它的返回值。 –

+0

讀取一行輸入並使用'strtok()'來解析它。 – Barmar

+0

[這裏](http://www.cplusplus.com/forum/beginner/2624/)是一個很好的網站。有一個有趣的程序。你可以玩它並從中學習。 :) –

回答

1

這是怎麼回事?

while(scanf("%d", &x) != EOF) { 
    printf("%d",x); 
    if (getchar() == '\n') break; 
} 
4

%d轉換符從未\n到緩衝區。它讀取緩衝區中的\n,並將其留在那裏。所以,這是本質上一個無限循環。

您可能需要使用格式說明符,如%c,其實際上讀取並存儲\n

儘管如此,如果我可以建議,儘量使getchar(),其內容從標準輸入的下一個字符返回值作爲int使用。但是,對於輸入爲的數字,您需要相應地解析和存儲整數和/或浮點值,但它肯定會爲您提供更大的靈活性。

+0

如何使用getchar()? – user3550981

+0

@ user3550981:你可能喜歡在這裏RTFM:http://man7.org/linux/man-pages/man3/ungetc.3.html – alk

0

爲什麼不使用argvstrtol

#include <stdlib.h> 
#include <stdio.h> 

int main(int argc, char **argv) { 
    int i = 0, x; 
    for(i = 1; i < argc; i++) { 
     x = strtol(argv[i],NULL,10); 
     printf("%d\n",x); 
    } 
    return 0; 
} 
0
while(scanf("%d",&x) != EOF) { 
    printf("%d",x); 
} 

...會做到這一點。不要忽略scanf返回。你的代碼循環的原因是你真的把10與十進制值('\ n')進行比較。此外,請記住,您要求scanf給你整數,這就是它給你的,它不會給你換行符,即使它可以。

已編輯,以便我特別添加了與EOF的比較。 您需要記住scanf掃描一個流,在這種情況下,輸入流,它將不會返回,直到流完成。

你應該真的使用字符串和sscanf()來做你想做的事情。

+0

不..它不工作。循環仍然沒有退出。它打印輸入但不退出。 – user3550981