为什么我的代码在第一个之后跳过我的Console.Read?

时间:2015-02-28 07:41:20

标签: c# input user-input skip

好的,所以这就是我所拥有的,控制台运行并接受第一个输入的任何数字并输出所有输出,但它会跳过第一个输出后的其余读数。我是C#的新手,想要学习,所以我肯定觉得我只是在这里错过了一些愚蠢的东西。不要担心目的,因为我现在只想要帮助解决这个问题。

谢谢你们,

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

namespace Stamps
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, and welcome to the U.S. Mail Stamp Printer. Now, to print the correct stamp for your postage, please enter the number of half ounces (so 1= .5 ounce, 2 = 1 ounce) your package will weigh \n");
            double i = Console.Read();

            Console.WriteLine("Thank you, now, will you be sending to zone 1, 2, or 3? Simply enter the zone number and press enter\n");
            double z = Console.Read();

            Console.WriteLine("Great! Now, last question before I print your stamp, will you be using Local Mail or Air Mail, use the number 1 for local and the number 2 for air.\n");
            double m = Console.Read();


            if (m == 2)
            {
                double m2 = .95;


            }
            else
            {
                double m2 = .49;
            }


            if( i == 1)
            {
               double i2 = 1;
            }



            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
            }
            }
            }

2 个答案:

答案 0 :(得分:3)

Console.Read method不解析输入,只读取输入流中的一个字符。

使用Console.ReadLine method并解析您获得的字符串:

double i = Double.Parse(Console.ReadLine());

或:

int z = Int32.Parse(Console.ReadLine());

如果你想处理无效输入你将使用TryParse方法,它们将返回一个布尔值,告诉你解析是否有效。


附注:当您尝试使用m2i2变量时,您会注意到它不存在。该变量对于if语句中的代码块是本地的,因此您需要在外部声明它以便以后能够使用它:

double m2;
if (m == 2)
{
  m2 = .95;
}
else
{
  m2 = .49;
}

答案 1 :(得分:1)

您可以刷新控制台缓冲区,也可以使用console.readline()。

有关更多信息,请参阅以下帖子,其中提供了您的问题答案。

http://stackoverflow.com/questions/7302544/flushing-system-console-read