2016-12-30 50 views
-2

我有一個程序由於for循環而不工作。我在這裏粘貼一段代碼工作片斷:這個程序爲什麼沒有輸出?

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

int main() 
{ 
    int numLoop = 19; 
    int counter; 
    int maxloops = 25; 
    int takenNum1 = 9, takenNum2 = 14, takenNum3 = 17, takenNum4 = 21, takenNum5 = 24; 

    for (counter=1; counter==maxloops; counter++) 
    { 
     printf("%d \n", counter); 

     if (counter == numLoop) 
     { 
      break; 
     } 

     if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
     { 
      counter++; 
      continue; 
     } 
    } 

    return 0; 
} 

預期的輸出是:正在打印1 2 3 4 5 6 7 8 10 11 12 13 15 16 18 19

沒有。

+0

你應該和所有的警告和調試信息編譯('GCC -Wall -Wextra -g'如果使用[GCC](http://gcc.gnu.org/)...),改善你的代碼直到你沒有警告,然後**使用調試器**('gdb')。你的for循環是錯誤的。 –

+0

您的* fix-my-code *問題在這裏是焦點話題。 –

+1

到目前爲止請顯示您的研究/調試工作。請先閱讀[問]頁面。 –

回答

6

for循環條件出現錯誤。你想寫counter != maxloops而不是counter==maxloops

否則,循環條件不滿足,並且循環體完全沒有執行。

這就是說,按照您的要求,

  1. 你需要移動檢查塊

    if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
    { 
        counter++; 
        continue; 
    } 
    

    printf()語句之前,以避免無條件打印。

  2. for循環條件應該真正的樣子

    for (counter=1; counter < numloop; counter++) 
             ^^^^^^^^^^ 
    

    ,只要你想輸出被限制爲19

+0

嗨,我試過了,但它似乎沒有工作 –

+0

道歉,爲上述評論。我的代碼段與它一起工作,但我原來的程序沒有。非常抱歉的混淆。 –

+2

@MythicCocoa在這種情況下,您需要創建一個MCVE。 –

1

您可能需要驗證邏輯。 如果輸出需要最多19次迭代。此外,在打印計數器之前應檢查內部if條件。

樣品僞代碼如下。

for (counter=1; counter<=numLoop; counter++) 
{ 
    if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
    { 
     continue; 
    } 
printf("%d \n", counter); 

} 
1

我想利用這裏的可教時刻。這似乎是誤解for聲明中條款的一個簡單問題。 for語句只是編寫while循環的快捷方式,其中內置了初始化和「after」代碼。for語句在其括號化列表中有三個子句 - (init ; while ; after)。因此,讓我們爲和例子寫成

for(i = 0 ; i < 10 ; i++) 
    { 
    do_something(); 
    } 

以上for循環可以使用while循環被改寫爲

i = 0; 

while(i < 10) 
    { 
    do_something(); 

    i++; 
    } 

正如你可以看到一個for語句中使用時,for是一個很大的緊湊。

+0

我誤解了第二條款的含義:P –

1

好友的代碼看起來都搞砸了。理解循環的概念。在for循環中仔細聽我說。

你保持條件邏輯錯誤。 循環將檢查條件。而且你寫的計數器應該等於maxloop,這將永遠不會滿足你的代碼,因爲代碼將退出,當計數器達到值19(計數器達到19時給出中斷)。希望解決第一部分。

其次請注意,在顯示值後應該發生循環的斷開。爲了清楚理解我已經給出了下面的代碼。希望這有助於。

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
int numLoop = 19; 
int counter; 
int maxloops = 25; 
int takenNum1 = 9, takenNum2 = 14, takenNum3 = 17, takenNum4 = 21, takenNum5 = 24; 
for (counter = 1; counter <= maxloops; counter++) 
{ 
if (counter == takenNum1 || counter == takenNum2 || counter == takenNum3 || counter == takenNum4 || counter == takenNum5) 
{ 
continue; 
} 
printf("%d \n", counter); 
if (counter == numLoop) 
break; 
} 
getchar(); 
return 0; 
} 
+0

請使用正確的英文。 –

+0

@BobJarvis請不要把這當作冒犯。我認爲這不是一個公平的指責理由。有些人因爲他們的背景而不擅長英語(英語不是他們的第一語言)。看起來他來自印度(很多人在那裏都不太懂英文,我從個人經歷講)。 –