2016-11-10 61 views
0

因此,通過這幾行代碼,我希望將輸入存儲到數組中,直到寫入點('。')。但是,當實際寫入點沒有任何反應時,它只是讓我提出另一個輸入。do..while循環 - 遇到條件時不會中斷

#include <stdio.h> 
#include <stdlib.h> 
#define MAX 100 

int main() 
{ 
    char array[MAX]; 
    int i = 0; 

    do{ 
     scanf("%c", &array[i]); 
     i++; 

    }while(array[i] != '.'); 

    return 0; 
} 
+0

看起來你在向數組中添加最後一個值之後正在遞增i,所以while條件將始終查看數組中的下一個(尚未存儲的)值,而不是最後一個插入的值? –

回答

1

你檢查前遞增我,所以在這個位置的值是不是你讀出的字符,但接下來的(所以無論是在陣列中)。

2

在do..while循環中,在評估while條件之前執行do代碼塊。這就是整個問題。

您正在填補array[i]用瀏覽的字符,然後通過增加i您評估array[i+1]就好像它是輸入,這實際上是在array[i]

您可能希望將其換爲正常循環。

當調試這種事情時,您希望從雙重檢查開始,如果您認爲正在滿足的條件得到滿足(例如通過調試打印條件值)。您可以通過在do塊的最後一行打印array[i]來完成此操作。