Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WriteLine工作,写入失败-古怪的bug?_C#_String_Methods - Fatal编程技术网

C#WriteLine工作,写入失败-古怪的bug?

C#WriteLine工作,写入失败-古怪的bug?,c#,string,methods,C#,String,Methods,因此,第59行有一个我只能描述为古怪的错误(如果我正确理解了我的代码),也就是说,如果您使用Console.ReadLine()离开返回行,文件将运行,如果您将其更改为Console.Read(),文件运行时将产生错误。奇怪的是,它不应该运行,因为我不调用函数或执行实际的console.writes等操作。所以我希望有人能帮助我理解这一点,或者确认我认为自己有一些古怪的代码是正确的,或者我对代码如何运行的理解是错误的 产生错误的代码: public string GetStr(String St

因此,第59行有一个我只能描述为古怪的错误(如果我正确理解了我的代码),也就是说,如果您使用
Console.ReadLine()
离开返回行,文件将运行,如果您将其更改为
Console.Read()
,文件运行时将产生错误。奇怪的是,它不应该运行,因为我不调用函数或执行实际的console.writes等操作。所以我希望有人能帮助我理解这一点,或者确认我认为自己有一些古怪的代码是正确的,或者我对代码如何运行的理解是错误的

产生错误的代码:

public string GetStr(String StrVar)//note - using strings here
{ 
  Console.Write(StrVar);return Console.ReadLine().ToLower().Trim(); 
}

如果将行
return Console.ReadLine()
更改为
return Console.Read()
,则会出现文件错误-但不管我实际调用什么,文件都应该运行-如果我了解发生了什么,字符串变量似乎会以某种方式自行写入控制台

完整代码:

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

namespace a015_mealCalculator
{
    class Program
    {
        public void Play()
        {
            //DisplayChek("DisplayChek!");

            do //do while loop
            {
                DisplayStr(">>>-- Meal Calculator v1.3 --<<< \n\n\n");//Welcome

                //ask info
                String fName = GetStr("Enter your FIRST NAME here: ");
                String lName = GetStr("Enter your LAST NAME here: ");
                String rName = GetStr("Enter the NAME of the RESTURANT you are dinning at here: ");
                String wholeName = fName + " " + lName;
                double mealCost = GetDouble("How much was your meal " + fName + "?");
                String mealGreeting = "\n" + wholeName + ", your meal at " + rName + " was:";    
                //process math
                double tax = mealCost / 8;
                double tip = mealCost % 18;
                double totalCost = mealCost + tip + tax;

                tax = Math.Round(tax, 2);//trim decimals
                tip = Math.Round(tip, 2);//trim decimals
                totalCost = Math.Round(totalCost, 2);    

                //Announce results
                Console.WriteLine("\nMeal: " + mealCost);
                Console.WriteLine(mealGreeting);
                Console.WriteLine("Meal: $" + mealCost);
                Console.WriteLine("Tax: $" + tax);
                Console.WriteLine("Tip: $" + tip);
                Console.WriteLine("Total: $" + totalCost);

            } while (PlayAgain());

            DisplayStr("Enjoy Your Meal!"); //Salutation
        }

        //MaxBox
        public void DisplayChek(String StringNameIs)
        { Console.WriteLine("I am in " + StringNameIs); }//Where are we?

        public void DisplayStr(String StrTxt)
        { Console.WriteLine(StrTxt); }

        public void DisplayRs()
        { Console.Write("\n\n"); }

        public string GetStr(String StrVar)//note - using strings here
        { Console.Write(StrVar);return Console.ReadLine().ToLower().Trim(); }

        public double GetDouble(String doubleRequest)// We take in a STRING but we return a DOUBLE
        {
            Console.WriteLine(doubleRequest + ": "); // HERE we use the STRING to ask for the DOULBE
            return double.Parse(Console.ReadLine()); //HERE we RETURN the DOUBLE asked for!
        }

        public Boolean PlayAgain()
        {
            Console.Write("\n\nDo you want to play again? (y)es or (n)o: ");
            String command = Console.ReadLine().ToLower();

            if (command == "y" || command == "yes") return true;
            return false;
        }

        static void Main(string[] args)
        {
            Program MealCalculator = new Program();
            MealCalculator.Play();

            //Play keeps file open
            //Console.Read();
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
名称空间a015_度量计算器
{
班级计划
{
公共游戏
{
//DisplayChek(“DisplayChek!”);
do//do while循环
{
DisplayStr(“>>>”--Fine Calculator v1.3--控制台。Read()返回一个整数,ReadLine()返回一个字符串

ReadLine方法或KeyAvailable属性和ReadKey方法比使用Read方法更可取。

控制台。Read()返回整数,ReadLine()返回字符串



ReadLine方法或KeyAvailable属性和ReadKey方法比使用Read方法更可取。

这不会作为控制台编译。Read()返回int。您不能对int执行.ToLower()。

这不会作为控制台编译。Read()返回int。您不能执行.ToLower()在int上。

如果查看这两种方法的文档:将从控制台流读取的下一个字符的字符代码作为整数返回,同时将行作为字符串返回。接受字符串参数,因此在第一种情况下存在类型不匹配。

如果查看这两种方法的文档,则返回字符ter从控制台流中读取的下一个字符的代码为整数,同时返回一行作为字符串。接受字符串参数,因此在第一种情况下存在类型不匹配。

您所说的是什么文件?我将所有代码都发布到我上面提到的文件(命名空间a015_mealCalculator),以及发布产生超级古怪的单一方法/函数,据我所知,我相信它发生在第59行。旁注:这个
双提示=mealCost%18;
不符合你的意思。
%
不是百分比,而是模。而不是“古怪”“请说明你在做什么时遇到了什么错误。”字符串变量以某种方式自行写入控制台”-不,它们不是。没有任何“以某种方式”自动发生的事情。你说的是什么文件?我将所有代码发布到我上面提到的文件(命名空间a015_mealCalculator),以及我所理解的产生超级古怪的奇异方法/函数,我相信它发生在第59行。旁注:这个
double-tip=mealCost%18;
不符合你的意思。
%
不是百分比,而是模。而不是“古怪”请说明在执行什么操作时出现的错误。“字符串变量以某种方式自行写入控制台”-不,它们不是。没有任何“以某种方式”出现的错误自动发生。哇。这对我来说完全是令人兴奋的。非常感谢。哇。这对我来说完全是令人兴奋的。非常感谢。我不知道,这对我来说是一个非常有教育意义的练习-谢谢。我想我只被允许检查一个答案,或者我会检查每个人。我认为BartoszKP是最好的答案但是所有的答案都非常有用,非常感谢。我不知道,这对我来说是一个非常有教育意义的练习-谢谢你。我想我只能检查一个答案,或者我会检查每个人。我认为BartoszKP的答案是最好的答案,但所有的答案都非常有用,非常感谢。非常感谢你的回答资料性回答。我认为Read只需阅读输入和返回的内容,readline只需阅读整行内容,包括换行符。谢谢。我确实阅读了文档-我患有诵读困难症,因此很容易遗漏内容或感到困惑。感谢您提供的非常资料性的回答。我认为Read只需阅读输入和返回的内容rned和readline重新调整了整行内容,包括换行。谢谢。我确实阅读了文档-我有诵读困难症,所以很容易错过一些东西或感到困惑。