2013-02-27 143 views
1

所以我的問題是以下。while循環掃描C

int n=0; 
while(n<=0) 
    scanf("%d",&n); 

此代碼進入無限循環,我不知道爲什麼。當用戶輸入數字> 0時,循環應該停止。

並感謝:)

+2

代碼可能永遠不會進入循環可言 - 因爲'N'未初始化。你怎麼知道它在循環?你輸入了一個數字,然後按ENTER? – 2013-02-27 16:00:16

+0

我剛剛編譯了這個,當我輸入值1並按回車時,它退出循環。我認爲你的問題在於你的程序中的其他地方。你可以嘗試把'n'變成'volatile int',以確保你沒有得到優化問題。 – mrh 2013-02-27 16:17:44

+0

我*非常*懷疑這個問題是由優化器造成的,'volatile'不會修復它。 – 2013-02-27 16:18:44

回答

0

我想你應該改變你的編譯器,因爲我得到了很好的結果。

您可能在其他地方遇到問題。

您可以點擊這裏:

http://ideone.com/C4Yobi

代碼:

#include<stdio.h> 
main() 
{ 
int n = 0; 
while (n <= 0) 
    scanf("%d",&n); 
printf("%d",n); 
} 

Input: 
-5 
4 
Output: 
4 
+0

好的謝謝。我在linux上使用gcc。 – user2116077 2013-02-27 16:24:19

+0

我試着用3個編譯器。它的工作正常。 – Arpit 2013-02-27 16:25:10

+0

對不起,我非常感謝。我明天會和老師談談,這似乎是一個海灣合作委員會的問題。 – user2116077 2013-02-27 16:28:13

1
while (n <= 0) 
    // something 

意味着「做一些事情而n值小於或等於0。只要確保在條件n <= 0正在評估時n已初始化。使用未初始化的變量會產生未定義的行爲

你應該這樣做:

int n = 0; 
while (n <= 0) 
    scanf("%d\n",&n); 
+0

是的,我知道,所以當掃描得到n> 10時,它應該停止對嗎? – user2116077 2013-02-27 15:59:26

+0

@ user2116077它當然應該 - 看到我的答案。 – 2013-02-27 16:00:06

+0

已經做到了,相同的無限循環。 – user2116077 2013-02-27 16:08:14

4

一遍又一遍又一遍又一遍......

stdin(通常)行緩衝 - 一個具有按<enter>使終端傳輸字符到你的程序。所以現在緩衝區中有一個懸掛的換行符,並且scanf()將在下一次迭代期間嘗試讀取它,但它不是一個整數,所以它會失敗並且不會更改變量的內容。爲了解決這個問題,使scanf()吃換行符:

scanf("%d\n", &number); 

(哦,是的,n也用於初始化,但似乎你的代碼進入循環無論如何,所以這不是問題做初始化,。雖然,否則你面臨其他奇怪的錯誤。)

+0

我已經試過了,沒有工作,但無論如何感謝:) – user2116077 2013-02-27 16:02:13

+0

@ user2116077從這個答案的質量(抱歉,但...)推導出來 - 你代碼中可能存在其他問題/語義錯誤/未定義的行爲。檢查這些。 – 2013-02-27 16:03:00

+0

@ H2CO3在C++它是UB,但在c的情況下這是真的嗎? – Arpit 2013-02-27 16:03:19

0

既然你聲稱嘗試過的東西,他們沒有工作(雖然我不明白爲什麼)讓我們嘗試別的。讓我們使用程序員的最好的朋友:printf。如何努力,而不是運行此代碼:

int n = 0; 

while(n <= 0) 
{ 
    printf("Please enter a number: "); 
    scanf("%d\n", &n); 
    printf("I see you entered: %d\n", n); 
} 

printf("Done with the loop. The value of n is: %d\n", n); 

這將讓你看到它在讀什麼電腦是做什麼值,因爲它讀取它們。嘗試用上面的代碼替換你的代碼,讓我們看看會發生什麼。

+0

現在它停止後,我再次進入,這是更好的。 – user2116077 2013-02-27 16:14:57

+0

告訴我們計算機打印出什麼... – 2013-02-27 16:15:17

+0

請輸入數字:5 我看到你輸入了:5 完成循環。 n的值是:5 – user2116077 2013-02-27 16:19:09