所以我正在编写一个逐行接收文本的程序,如果该行包含单词问题,则应输出yes或no。 该程序正在运行,但我必须按两次输入才能获得输出。 我得到的第一个输入,这是最后一行。第二个输入就是这样,while循环可以突破。
有关如何改进这一点并且不需要第二次输入的任何建议吗?
using System;
using System.Collections.Generic;
namespace Tester
{
internal class Program
{
private static void Main(string[] args)
{
List<string> stringList = new List<string>();
string input = "";
while ((input = Console.ReadLine()) != string.Empty)
{
var s = input.ToLower();
stringList.Add(s.Contains("problem") ? "yes" : "no");
}
foreach (var str in stringList)
Console.WriteLine(str);
Console.ReadKey();
}
}
}
答案 0 :(得分:1)
好吧,对于最后一个输出,你会输入一些内容。那是(input = Console.ReadLine()) != string.Empty
开始的时候,条件会过去。
循环将返回到此行并阻塞,直到您为其提供新输入。然后据说你只需输入enter,在这种情况下循环就会存在。这是预期的行为。
我不确定是什么让你感到不安。如果你真的想要摆脱第二次输入,也许你可以在你的线上放置一些标记(行/q
或其他),并且无论何时在你的行中找到你都知道你应该摆脱循环。
或者,您可以计算获得的输入数量,并确保准确地获得10
或20
或其他任何内容。达到该数字后,循环将在处理完最后一个输入后退出。
答案 1 :(得分:1)
您可以使用it "fails if initial quantity is changed" do
msg_error = "Change of the initially defined qty is impossible"
deal = Deal.create(@attr)
deal.update(quantity: 5)
expect(deal).to have(1).errors_on(:quantity)
end
,string.IsNullOrEmpty()
方法通常比ToUpper()
更准确。所以我可能会将你的代码重构为:
ToLower()
顺便欢迎来到SO ......;)
答案 2 :(得分:0)
static void Main(string[] args)
{
string input = "";
input = Console.ReadLine();
while (input != string.Empty)
{
if (input.Contains("problem"))
{
Console.WriteLine("yes");
}
else
{
Console.WriteLine("no");
}
input = Console.ReadLine();
}
Console.ReadKey();
}
也许我知道你的意图。但是如果你想打破一会儿(输入!= string.Empty)你必须按空行。