C#用户输入设置数组和循环数组的大小以显示元素

时间:2017-08-18 13:49:41

标签: c# arrays loops

目标是通过多少测试分数从用户输入创建数组大小。然后创建一个循环,通过提示用户从0到100的每个测试分数来填充数组。 最后显示结果,通常使用另一个循环。

问题:为什么输入测试分数时会出现例子" 50"它在数组中添加了50个0元素?

任何帮助都会感激不尽,谢谢。我已经看过一些类似的帖子,但无法解决这个问题。另外,一个是西班牙语。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

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


                // prompt user to ask how many test scores to build the size of the array


                Write("How many test scores total: ");
                string sSize = ReadLine();          
                int i = Convert.ToInt32(sSize);              
                int[] score = new int[i];



            // create the loop of asking the test scores limited to the array sSize

            for (int a = 1; a < i + 1; a++)
            {

                Write("Please enter a test score " + a + " from 0 to 100: ");
                string testArray = ReadLine();


                int g = Convert.ToInt32(testArray);

                int[] tests = new int[g];

                //create loop to display all test scores
                foreach (var item in tests)
                    Console.WriteLine(item);





                }

            }
        }
}

3 个答案:

答案 0 :(得分:2)

int [] tests = new int [g];

在这里,您要分配用户给出的数组的大小而不是填充数组,您缺少填充语句或查询。

答案 1 :(得分:1)

因为您在循环内部创建了一个新数组,该数组是用户输入的“得分”的大小,然后您循环它。这些值都是零,因为当你创建一个数组时,它会填充类型的默认值,在本例中为0.第二个循环应该在第一个循环之后,你不应该在第一个循环内部创建数组,只需填充您创建的原始数组(score)。

这是你真正想要的。请注意,您应该从0开始而不是1开始索引。

Write("How many test scores total: ");
string sSize = ReadLine();          
int i = Convert.ToInt32(sSize);              
int[] score = new int[i];

// create the loop of asking the test scores limited to the array sSize
for (int a = 0; a < i; a++)
{
    Write("Please enter a test score " + (a + 1) + " from 0 to 100: ");
    string testArray = ReadLine();
    int g = Convert.ToInt32(testArray);
    score[a] = g;
}

//create loop to display all test scores
foreach (var item in score)
    Console.WriteLine(item);

您可能还需要考虑使用int.TryParse,以便确定用户是否输入了无效值。

答案 2 :(得分:0)

我认为你复制了来自不同地方的代码片段,并且无法将它们正确地组合在一起。

您在此处创建了不需要的数组:int[] tests = new int[g];。然后尝试使用它会使你的情况恶化。

此外,您还没有正确处理索引。当你学习编程时,使用正确的格式和好的变量名称,将帮助你更好地理解你自己的代码(可能从不同的地方放在一起) - 改进你的调试&#34;技能。

我有一个&#34;固定&#34;你的代码版本应该是不言自明的

using System;
using static System.Console;

namespace ConsoleApp3 {
    class Program {
        static void Main(string[] args) {
            // prompt user to ask how many test scores to build the size of the array
            Write("How many test scores total: ");
            string testCountStr = ReadLine();
            int testCount = Convert.ToInt32(testCountStr );
            int[] testScores = new int[testCount];

            // create the loop of asking the test scores limited to the array sSize
            for (int i = 0; i < testCount; i++) {
                Write($"Please enter score for test {i + 1} from 0 to 100: ");
                string scoreStr = ReadLine();
                int score = Convert.ToInt32(scoreStr);
                if (score > 100 || score < 0) {
                    //TODO: handle your error
                    WriteLine("Invalid score. Please try again");
                    --i;
                    continue;
                }
                testScores[i] = score;
            }

            WriteLine();
            // create loop to display all test scores
            for (int i = 0; i < testScores.Length; ++i)
                WriteLine($"Your score for test {i + 1} is {testScores[i]}");


        }
    }
}