【问题标题】:C# Variable int assumes a different valueC# 变量 int 采用不同的值
【发布时间】:2015-01-22 00:34:38
【问题描述】:

我正在尝试创建一个简单的程序来计算平均值。用户应该输入一个正数,然后我创建一个循环从 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();
        }
    }
}

【问题讨论】:

  • 一个了解ASCII codes的好机会,每个程序员都应该知道。
  • 这将是一个很好的面试问题......
  • @HansPassant 我非常不同意。我认为很多程序员不需要了解 ASCII。但几乎所有人都需要了解Unicode

标签: c# variables input


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢@Selman22,它成功了!我来看看 int.Parse 方法!
【解决方案2】:

问题是您使用的是Console.Read

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

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

(Reference Source)

这意味着它只是返回传递的值(而不是解析)。 Unicode '1' 是数字 49。

改为使用Console.ReadLine,它除了获取整个输入(不仅仅是第一个字符)之外还会返回一个字符串,这样当您使用Convert.ToInt32 时,它会调用int.Parse 而不是强制转换。

【讨论】:

  • @Selman22 哇,这就是我没有仔细阅读文档的结果。固定。
  • 不是 ASCII; Unicode(根据 Console.InputEncoding 翻译后)。
  • @TomBlodget 有趣,在这种情况下它们是相同的。感谢您的澄清
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
相关资源
最近更新 更多