[英]C# Help on a loop.
在我的編程班入門中,我們還有額外的功課分配。 我們需要允許用戶輸入名稱,他們參加了多少測驗,每個測驗成績,然后計算平均值,然后計算他們的字母成績。 我現在所擁有的是
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,但是我應該在循環中的哪個位置放?
您在做錯什么,是您不重新啟動計數器,因此,如果第一次用戶進行5次測驗,您的計數器是6,並且可能大於numberOfQuizzes,因此它永遠不會進入第二個while循環(或者如果進入它,如果這次人數更多,將會錯過一些測驗)
最后,如果沒有的話,您將擁有什么。 所以改變這個:
if (sname != "Exit")
{
Console.WriteLine("Number of Quizzes: ");
snumberOfQuizzes = Console.ReadLine();
while (counter - 1 < numberOfQuizzes) ;
}
至
if (sname != "Exit")
{
counter = 1;
}
除了武士...我的建議是,如果您在課堂上學到了這一點,則建議將將測驗分數輸入的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")
循環將處理新輸入並繼續循環直到輸入“ Exit”。 重新初始化您再次使用的值是一個好主意,這樣您就不會在下一個人身上意外地使用它們的標記。 在每個循環迭代的開始執行此操作。
最后,關於等級,應在輸入一個人的所有分數之后但在您要求新名稱之前計算。 在確定成績之前,您還需要計算平均值。但是,如果我們為您完成所有工作,則應該獲得額外的成績。 ;)
我的代碼版本,很少修改,可以正常工作。
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"));
}
}
}
}
}
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();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.