2013-07-16 79 views
0

我在編程課的介紹中有額外的學分。我們需要允許用戶輸入名稱,他們參加了多少次測驗,每個測驗等級,然後計算平均值,然後計算他們的字母等級。我現在擁有的是C#循環中的幫助。

namespace ConsoleApplication10 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      int counter = 1; 
      Console.WriteLine("Name: "); 
      string sname = Console.ReadLine(); 
      int numberOfQuizzes = 0; 
      while (sname != "Exit") 
      { 
       Console.WriteLine("Number of Quizzes: "); 
       string snumberOfQuizzes = Console.ReadLine(); 
       numberOfQuizzes = int.Parse(snumberOfQuizzes); 

       while (counter - 1 < numberOfQuizzes) 
       { 
        Console.WriteLine("Quiz Score {0}", counter); 
        string sscore = Console.ReadLine(); 
        counter++; 
       } 

       Console.WriteLine("Enter another name or type Exit to quit."); 
       sname = Console.ReadLine(); 

       if (sname != "Exit") 
       { 
        Console.WriteLine("Number of Quizzes: "); 
        snumberOfQuizzes = Console.ReadLine(); 
        while (counter - 1 < numberOfQuizzes) ;  
       } 
      } 
     } 
    } 
} 

循環第二次通過不讓用戶輸入他們進行了多少次測驗。另外我知道給我的成績我需要一個if/else,但是我的循環中會放哪個?

回答

0

我的版本的代碼,很少返工和完全工作。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication10 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int counter; 
      double score; 

      while (true) 
      { 
       counter = 1; 
       score = 0.0; 
       Console.WriteLine("Name(type 'Exit' to quit): "); 
       string sname = Console.ReadLine(); 
       if (sname == "Exit") 
       { 
        Environment.Exit(0); 
       } 
       else 
       { 
        int numberOfQuizzes = 0; 
        Console.WriteLine("Number of Quizzes: "); 
        numberOfQuizzes = int.Parse(Console.ReadLine()); 

        while (counter <= numberOfQuizzes) 
        { 
        Console.WriteLine("Quiz Score {0}", counter); 
        score += double.Parse(Console.ReadLine()); 
        counter++; 
        } 
        score = (score/(counter-1)); 
        if (score < 60) 
        { 
         Console.WriteLine("Letter Grade: F"); 
        } 
        else if (60 <= score && score < 70) 
        { 
         Console.WriteLine("Letter Grade: D"); 
        } 
        else if (70 <= score && score < 80) 
        { 
         Console.WriteLine("Letter Grade: C"); 
        } 
        else if (80 <= score && score < 90) 
        { 
         Console.WriteLine("Letter Grade: B"); 
        } 
        else if (90 <= score) 
        { 
         Console.WriteLine("Letter Grade: A"); 
        } 

        Console.WriteLine("Grade: {0}",(score/100).ToString("P")); 
       } 
      } 
     } 
    } 
} 
0

你做錯了什麼是你不重新啓動計數器,所以我們說如果第一次用戶有5次測驗你的計數器是6,可能比numberOfQuizzes更大,所以它永遠不會進入第二個while循環(或如果它走了,它會錯過一些測驗,如果這個數字更大)

而你在你最後的,如果是不必要的。因此,改變這種:

if (sname != "Exit") 
{ 
    Console.WriteLine("Number of Quizzes: "); 
    snumberOfQuizzes = Console.ReadLine(); 
    while (counter - 1 < numberOfQuizzes) ;  
} 

if (sname != "Exit") 
{ 
    counter = 1; 
} 
0

除了武士...... 我的建議是改變while循環進入競猜比分變成了for循環,如果你已經瞭解到,在課堂裏。它自然會提醒您初始化值counter = 0;並將增加值counter++

從...

while (counter - 1 < numberOfQuizzes) 
{ 
    Console.WriteLine("Quiz Score {0}", counter); 
    string sscore = Console.ReadLine(); 
    counter++; 
} 

要...

for (counter = 0; counter < numberOfQuizzes; counter++) 
{ 
    Console.WriteLine("Quiz Score {0}", counter); 
    string sscore = Console.ReadLine(); 
} 

您還可以刪除...

if (sname != "Exit") 
{ 
    Console.WriteLine("Number of Quizzes: "); 
    snumberOfQuizzes = Console.ReadLine(); 
    while (counter - 1 < numberOfQuizzes) ;  
} 

...作爲while (sname != "Exit")循環將處理新輸入並繼續循環,直到「退出」爲輸入。重新初始化您再次使用的值是個好主意,因此您不會意外在下一個人身上使用它們的標記。在每次循環迭代開始時都這樣做。

最後,至於等級,應該在所有人的分數已經輸入之後但在您要求新名稱之前計算。你還需要計算平均值,然後才能確定分數......但如果我們爲你做了這一切,我們應該得到額外的分數。 ;)

0
static void Main() 
{ 
    Console.WriteLine("Name: "); 
     string sname=Consolre.ReadLine(); 
     while(sname != "Exit") 
    { 
     Console.WriteLine("Enter the no:of Quizes: "); 
      int numOfQuiz=Convert.ToInt32(Console.ReadLine()); 
     int score=0,totalQuiz=numOfQuiz; 
     while(numOfQuiz>0) 
     { 
      Console.WriteLine("Enter the score for Quiz {0}",totalQuiz-numOfQuiz+1); 
      score+=Convert.ToInt32(Console.ReadLine()); 
      numOfQuiz--; 
     } 
     score = score/numOfQuiz; 
     if(score>90) 
      Console.WriteLine("A"); 
     else if(score >70) 
      Console.WriteLine("B"); 
     else 
      Console.WriteLine("C"); 
     Console.WriteLine("Enter another name or exit? "); 
     sname=Console.ReadLine(); 
    } 
}