C#Variable int采用不同的值

时间:2015-01-22 00:34:39

标签: c# variables input

我正在尝试创建一个简单的程序来计算平均值。用户应输入一个正数,然后我创建一个循环,从0到输入的数字相加。然后平均值是总数除以输入的数字。

问题:当我输入一个数字,例如10时,变量变为58.对于我输入的任何值,它总是添加48.任何人都有关于这个问题的线索吗?

以下是代码:

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

namespace inClass1
{
    class Loops
    {
        static void Main(string[] args)
        {
            int total = 0;
            int num;
            Console.Write("Enter a positive number: ");

            num = Convert.ToInt32(Console.Read());

            for (int i = 0; i <= num; i++)
            {
                total = total + i;
            }

            double average = total / (double)num;
            Console.WriteLine("The average is = " + average);
            Console.ReadLine();
        }
    }
}

2 个答案:

答案 0 :(得分:5)

这是因为Console.Read方法读取第一个char并返回其ASCII值。它只读取一个字符,因此您无法同时读取多个数字。要解决此问题,只需使用Console.ReadLinestring作为输入:

 um = Convert.ToInt32(Console.ReadLine());

如果用户输入的数字无效,则此操作将失败。为了防止这种情况,您可以查看int.TryParse方法。

答案 1 :(得分:1)

问题是您使用的是Console.Read

该方法返回int,而不是string。该int是读取字符的Unicode字符代码。采用int的Convert.ToInt32的重载如下所示:

public static int ToInt32(int value) {
        return value;
    }

(Reference Source)

这意味着它只返回传递的值(而不是解析)。 Unicode&#39; 1&#39;是49号。

相反,使用Console.ReadLine除了获取整个输入(不仅仅是第一个字符)之外还会返回一个字符串,以便在使用{int.Parse时调用Convert.ToInt32而不是使用{{1}} 1}}。