簡體   English   中英

C#幫助循環。

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM