2013-08-02 18 views
4

我是一個新手,C語言程序設計和我們仍然在循環開始。對於今天我們的工作,我們任務是創建一個計算有多少合格或不合格的等級也有,但是當一個負數輸入迴路斷開一個做,而計劃。另外,跳過100以上的數字。這是我的計劃:C程序計算有多少合格或不合格的等級和退出時負數輸入

#include<stdio.h> 
#include<conio.h> 

int main() 
{ 
int grade, pass, fail; 

pass = 0; 
fail = 0; 

do { 
    printf("Enter grade:\n"); 
    scanf("%d", &grade); 
    printf("Enter -1 to end loop"); 
} 

while(grade == -1){ 
    if(grade < 100){ 
     if(grade >= 50){ 
     pass = pass + 1; 
     } 
     else if { 
     fail = fail + 1; 
     } 
    } 
    break; 
} 
printf("Pass: %d", pass); 
printf("Fail: %d", fail); 

getch(); 
return 0; 
} 

有人能告訴我如何改善或者我哪裏錯了?

+1

你'while'循環實際上是一個'做-while'循環。之後的括號內的東西不是循環的一部分 - 它實際上是一個範圍塊。這是錯誤的。另外,你的while條件是錯誤的,'else if {'是無效的,並且你不應該有'break'。 – paddy

+0

請注意,你忽略了誰設法得到的100年級學生(你應該有'如果(等級<= 100)')。這在接受的答案中被無聲地糾正了。 –

回答

3

您需要放置在dowhile之間循環的所有代碼。

do { 
    printf("Enter -1 to end loop"); 
    printf("Enter grade:\n"); 
    scanf("%d", &grade);   

    if(grade <= 100 && grade >= 0) { 
      if(grade >= 50){ 
       pass = pass + 1; 
      } 
      else { 
       fail = fail + 1; 
      } 
    } 

} while(grade >= 0); 

一個do-while循環的一般結構爲:

do { 
    // all of the code in the loop goes here 

} while (condition); 
// <-- everything from here onwards is outside the loop 
+1

非常感謝!我的代碼現在正在工作。我想我已經把其他循環放在while循環中。謝謝你糾正我。 – confusedcat

+3

歡迎您!如果這有幫助,您應該接受:) – jh314

+0

請注意,-2是負數(並且應該根據規範停止循環),但當輸入-2時,原始代碼和修訂代碼都不會終止循環。條件應該是'while(grade> = 0);' –

0
do { 
    // stuff 
} 
while { 
    // more stuff 
} 

是混合2個概念放在一起:在while loopdo while loop - 我想通過重構那塊開始。

+1

如果OP不知道如何寫一個待辦事項或while循環,那麼我懷疑他會明白「重構」的意思。 – stackoverflowuser2010

+0

是的,我不知道重構是什麼意思。我們仍然從所有的循環開始,我是一名新生計算機科學的學生,這實際上是我第一次編碼。對不起。我稍後會對此進行研究。 – confusedcat

0

有關問題的邏輯是:

  1. 保持運行時輸入不是-1。如果輸入爲-1,則打破/退出執行並顯示輸出。
    1. 輸入級。
    2. 如果等級爲小於或等於100,或者大於或等於0執行合格/不合格檢查:
      1. 如果等級是大於或等於50,則該人已經過去了。增加通過次數。
      2. 如果等級低於50,那個人已經失敗。增加失敗的考試數量。

jh314's layout logic是正確的,但不能解決執行邏輯:

int grade, pass, fail; 

    pass = 0; 
    fail = 0; 

    do { 
    printf("Enter -1 to end loop"); 
    printf("Enter grade:\n"); 
    scanf("%d", &grade); 

    //you want grades that are both less than or equal to 100 
    //and greater than or equal to 0 
    if(grade <= 100 && grade >= 0){ 
      if(grade >= 50){ 
       pass = pass + 1; 
      } 
      //if the grades are less than 50, that person has failed. 
      else { 
       fail = fail + 1; 
      } 
    } 

    } while(grade != -1); 

    printf("Pass: %d", pass); 
    printf("Fail: %d", fail); 
+1

謝謝!我喜歡你如何把邏輯順序化,因爲它看起來更容易做,而且更有條理。我會在下一次做一個節目時做這個。 – confusedcat

+0

不客氣,@ThezzaBaluyos。在編寫代碼時寫出這樣的問題非常有用。最終,你會達到你經常這樣想的地步。我會給你一個公理:「紙是RAM」。 ;) – jrd1

2
#include <stdio.h> 
#include <conio.h> 

int main() 
{ 
    int grade, pass, fail; 

    pass = 0; 
    fail = 0; 

    do { 
     printf("\nEnter grade:\n"); 
     scanf("%d", &grade); 
     printf("Enter -1 to end loop"); 

     if (grade < 100 && grade >= 50) 
      pass = pass + 1; 
     else 
      fail = fail + 1; 
     printf("\nPass: %d", pass); 
     printf("\nFail: %d", fail); 
    } 
    while (grade >= 0); 

    getch(); 
} 
+0

這裏我把你的邏輯的整個條件放在do-while循環中。您不需要在此程序中使用break語句,因爲已經有一個do-while循環。此外,條件是「while(grade!= 1);」。 –

+1

嗨哈立德,請考慮標記你的代碼,並解釋你對OP做了什麼,並將你的解釋放在答案本身中,而不是在它下面的評論中 –

+1

你也可以使用這種代碼「while(grade> 0」)。也是一個非常好的條件 –

相關問題