简体   繁体   English

使用C#中的while循环计算所有用户输入数字的平均值

[英]Calculating average of all user input numbers using while loops in C#

I'm trying to work through a problem presented in one of my classes.我正在尝试解决我的一个课程中出现的问题。 The prompt is telling us to get the user to enter any numbers (can be positive, negative, or 0), while ignoring non-numeric inputs.提示告诉我们让用户输入任何数字(可以是正数、负数或 0),而忽略非数字输入。 Then we need to compute and display the average of all the numbers entered by the user.然后我们需要计算并显示用户输入的所有数字的平均值。 If the user doesn't give any numbers, I need to output "you didn't enter any numbers".如果用户没有给出任何数字,我需要输出“你没有输入任何数字”。

My main issue is that I'm not able to store and add the numbers given by the user properly.我的主要问题是我无法正确存储和添加用户提供的数字。 I'm fairly certain that everything before and after the while statement is sound.我相当确定 while 语句之前和之后的所有内容都是合理的。 So, I know the issue must lie within while (enter!="Yes"||enter!="yes"||enter!="Y"||enter!="y") , but I'm not exactly sure what the issue is.所以,我知道问题必须在while (enter!="Yes"||enter!="yes"||enter!="Y"||enter!="y") ,但我不确定问题是什么。 Since I have variables for my average, the sum of the user given numbers, and a counter to keep track of loop iterations, I'm pretty sure my troubles are coming from my code not being in the correct order.由于我有我的平均值变量、用户给定数字的总和以及一个用于跟踪循环迭代的计数器,我很确定我的麻烦来自我的代码顺序不正确。

Console.WriteLine("Please enter any numbers, then type Yes to continue.");
        string enter = Console.ReadLine();
        string msg = "";
        decimal average;
        int counter = 0;
        decimal sum = 0;
        bool res = decimal.TryParse(enter, out average);
        while (enter!="Yes"||enter!="yes"||enter!="Y"||enter!="y")
        {
            sum = decimal.Parse(enter);
            Console.WriteLine("Please enter any numbers, then type Yes to continue");
            enter = Console.ReadLine();
            sum += counter;
            counter++;
        }
        average = sum / counter;
        msg = (res) ? $"The sum of your numbers is {average}" : "You didn't enter any numbers";
        Console.WriteLine(msg);

try this one试试这个

static void Main()
{
    int counter = 0;
    decimal sum = 0;
    bool exit=false;    
    do 
    {
        Console.WriteLine("Please enter any number or type \"done\" to exit");
        var enter = Console.ReadLine();
        if (enter.Trim().ToLower() != "done")
        {
            var ok = decimal.TryParse(enter, out var num);
            if(!ok) continue;
            sum += num;
            counter++;
        } else exit=true;
        
    } while (!exit);
    
     var average = counter > 0 ? sum / counter:0;
     var msg = average>0?  $"The average  of your numbers is {average}" : "You didn't enter any numbers";
    Console.WriteLine(msg);
}

Here's an alternative for you to play with.这是您可以玩的替代方案。 Just to give you some more ideas.只是给你一些更多的想法。

string enter = "";
string[] stop = new [] { "yes", "y" };
List<int> numbers = new List<int>();
while (!stop.Contains(enter.ToLowerInvariant()))
{
    Console.WriteLine("Please enter any numbers, then type Yes to continue.");
    enter = Console.ReadLine();
    if (int.TryParse(enter, out int number))
    {
        numbers.Add(number);
    }
}
if (numbers.Any())
{
    Console.WriteLine($"The average of your numbers is {numbers.Average()}");
}
else
{
    Console.WriteLine("You didn't enter any numbers");
}

Try this......尝试这个......

    string enter = "";
    string msg = "";
    decimal average;
    int counter = 0;
    decimal sum = 0;
    decimal input;
    
    while (enter!="Yes"&&enter!="yes"&&enter!="Y"&&enter!="y")
    {
            Console.WriteLine("Please enter any numbers, then type Yes to continue");
            enter = Console.ReadLine();
            bool res = decimal.TryParse(enter, out input);
            if (res) { 
                sum += input;
                counter++;
            }
    }
    if (counter != 0)
    {
        average = sum / counter;
        msg = $"The average of your numbers is {average}";
    }
    else {
        msg = "You didn't enter any numbers";
    }

    Console.WriteLine(msg);
    System.Threading.Thread.Sleep(5000);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM