2013-08-25 63 views
3

我正在使用該代碼,並試圖使用x + 1而不是++x,結果是無限循環並在屏幕上打印了零。爲什麼我不能在for循環中使用x + 1?

這是代碼:

#include <stdio.h> 
int main(void){ 
    int x; 
    for(x = 0; x <= 100; x + 1) //instead of ++x 
    printf("%d\t",x); 
    return 0; 
} 

我不知道這個動作.....爲什麼編譯器沒有產生這樣的錯誤,,,,和實際發生的事情?? !!並且是x++被視爲x += 1?!

+4

「爲什麼編譯器不會產生這樣的錯誤」爲什麼要這樣呢? 'x + 1'是一個完美有效的表達。它恰好沒有你想要的效果。如果警告已啓用,我的編譯器會爲它發出警告。 – hvd

+0

此問題不是要求輸入驗證碼。提問者想知道爲什麼某段代碼不起作用。當初學者問爲什麼某些代碼不像預期的那樣行事時,對於更有經驗的編程人員來說這可能是簡單的。但初學者至少已經嘗試了一些東西,並要求瞭解原因。我不認爲這是題外話? – verbose

+0

我很傷心。這是半合法的。假設我真的明白了,答案是兩者同樣可用。但是最好找到一本解釋x ++是x + = 1的簡短手冊的教科書。我會說仍然是主題。不是一個問題。回到這本書,年輕人。 –

回答

9

您需要改變x的值,否則您的循環將永遠不會終止。如果只有x + 1,則在迭代結束時,計算x + 1,但丟棄其結果值。表達式的結果不存儲在任何地方。所以x將保持爲零,並且x <= 100將保持爲真,並且您的循環將永遠持續。

如果您有任何以下的:

x = x + 1 
x += 1 
x++ 
++x 

x本身的價值遞增。這就是你需要的。

5

表達x + 1應該在for循環x = x + 1,所以正確的:

for(x = 0; x <= 100; x + 1) 
        ^
         doesn't increment x 

無限循環!

爲:

for(x = 0; x <= 100; x = x + 1) 

for(x = 0; x <= 100; x += 1) // or simply x++ or ++x 

編譯器並沒有產生這樣的錯誤,因爲x + 1是有效的表達式(但你希望不是)。

所以,x += 1x++++x不只是添加一個x還要修改x值。

1

你的方法並不完美,因爲它肯定增加了x的值,但是當涉及到賦值時,它失敗了。所以你的陳述應該涵蓋你的所有要求。

嘗試使用

#include <stdio.h> 
int main(void){ 
int x; 
for(x = 0; x <= 100; x = x + 1) 
    printf("%d\t",x); 
return 0; 
} 

,或者您可以使用

#include <stdio.h> 
int main(void){ 
int x; 
for(x = 0; x <= 100; x++) 
    printf("%d\t",x); 
return 0; 
} 

而不是x++(後遞增),你也可以使用預先增量(++x)。 表達式x = x + 1;也可以寫成x += 1;這是嵌入增量的簡寫方法。你不僅可以使用其他操作員,也可以使用其他操作員。

x -= 3; 
x *= 2; 
6

雖然for循環的基本結構是喜歡 -

for(initialization; condition; increment or decrement) 

但在其核心部分的「條件」部分被處理僅來控制循環行爲。所以,如果其他兩個部分在語法上是正確的,那麼編譯器不會產生任何錯誤。

因爲,x+1是一個有效的C語句和x的是不會改變,因此會去一個無限循環的條件[x <= 100 => 0 <= 100]是永遠真實的價值。

同樣,當單獨使用時,x++++x均被視爲x = x + 1。但是,x++實際上是後增量運算符,而++x是預增運算符。這意味着,與++xx的值將先增加,然後分配到x。而x的當前值將用於x++中的全部陳述,然後x將遞增並分配新值。請看下面的示例 -

#include<stdio.h> 
    void main() 
    { 
     int x=5; 
    /* Post & Pre-Increment used independently */ 
     x++; 
     printf("x : %d", x); 

     ++x; 
     printf("\nx : %d", x); 

    /* Used with printf() statement */ 
     printf("\nPre-increment of x: %d", ++x); 

     printf("\nPost-increment of x: %d", x++); 

     printf("\nPost-increment effect on x: %d", x); 
    } 

輸出:

x : 6 
x : 7 
Pre-increment of x: 8 
Post-increment of x: 8 
Post-increment effect on x: 9 

我希望我的解釋讓你們明白,如果還沒有,你可以回答我。

相關問題