You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Visual Studio 2022两数求和程序输入跳过、结果异常问题

问题描述

在Visual Studio 2022环境下使用C#编写两数求和练习代码,代码如下:

class Program
{
    static void Main(string[] args)
    {
        int x, y, sum;

        Console.Write("Enter the value of X: ");
        x = Console.Read();
        Console.Write("Enter the value of Y: ");
        y = Console.Read();
        Console.WriteLine();

        sum = x + y;

        Console.WriteLine("SUM = " + sum);
        Console.WriteLine();
        Console.WriteLine("Press any key to close...");
        Console.ReadKey();
    }
}

运行时出现异常:输入X的值按下回车键后,程序直接跳过Y值输入环节执行求和计算,输出不符合预期的结果66,未按设计等待用户输入Y值后再计算两数之和。

错误原因

问题核心是对Console.Read()方法的行为理解错误:

  1. Console.Read()每次只会从输入缓冲区读取单个字符的编码值,返回的int值是对应字符的ASCII/Unicode编码,不会自动将用户输入的数字字符串转换为对应的整数数值。
  2. 控制台输入按回车后,输入的内容、加上Windows系统回车产生的两个控制字符\r(ASCII码13,回车符)、\n(ASCII码10,换行符)会全部送入输入缓冲区。第一次调用Console.Read()时仅读取缓冲区第一个字符(也就是你输入X时敲的第一个字符),剩余内容(包括回车控制符)全部留在缓冲区中。
  3. 第二次调用Console.Read()时,程序不会等待用户新输入,会直接读取缓冲区中剩余的第一个字符(也就是回车符\r)。你得到的结果66刚好是字符'5'的ASCII码53加上回车符\r的ASCII码13的和,和错误表现完全吻合。
修复方案

需要替换输入方法,使用Console.ReadLine()读取用户输入的整行内容,再将字符串转换为整数类型,修复后代码如下:

class Program
{
    static void Main(string[] args)
    {
        int x, y, sum;

        Console.Write("Enter the value of X: ");
        // 读取整行输入,转换为整数,该方法会自动消耗掉回车产生的控制符,不会残留输入
        x = int.Parse(Console.ReadLine());
        Console.Write("Enter the value of Y: ");
        y = int.Parse(Console.ReadLine());
        Console.WriteLine();

        sum = x + y;

        Console.WriteLine("SUM = " + sum);
        Console.WriteLine();
        Console.WriteLine("Press any key to close...");
        Console.ReadKey();
    }
}

注:练习场景下上述代码可以正常运行,如果需要做输入合法性校验(比如用户输入非数字内容的场景),可以后续替换为int.TryParse()方法做容错处理。

内容的提问来源于stack exchange,提问作者Marcb7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:00:57