C# 在每行c中查找单词#

C# 在每行c中查找单词#,c#,text,output,lines,C#,Text,Output,Lines,所以我在写一个程序,它一行接一行地接收文本,如果这行包含单词problem,那么应该输出yes或no。 程序正在运行,但我必须按enter键两次才能得到输出。 我得到的第一个输入是最后一行。第二个输入是这样while循环可以中断 有什么建议,我可以改善这一点,而不需要第二次进入 using System; using System.Collections.Generic; namespace Tester { internal class Program { p

所以我在写一个程序,它一行接一行地接收文本,如果这行包含单词problem,那么应该输出yes或no。 程序正在运行,但我必须按enter键两次才能得到输出。 我得到的第一个输入是最后一行。第二个输入是这样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();
        }
    }
}
使用系统;
使用System.Collections.Generic;
名称空间测试器
{
内部课程计划
{
私有静态void Main(字符串[]args)
{
List stringList=新列表();
字符串输入=”;
while((input=Console.ReadLine())!=string.Empty)
{
var s=input.ToLower();
stringList.Add(s.Contains(“问题”)?“是”:“否”);
}
foreach(stringList中的var str)
控制台写入线(str);
Console.ReadKey();
}
}
}

好吧,对于最后一个输出,您将键入一些内容。这时
(输入=控制台.ReadLine())!=string.Empty
生效,条件将通过

循环将返回到此行并阻塞,直到您给它新的输入。然后假设您只需输入enter,在这种情况下,循环就会存在。这是预期的行为

我不知道是什么让你不安。如果你真的想摆脱第二个回车,也许你可以在你的行中放入一些标记(行
/q
或其他任何东西),只要在你的行中找到,你就知道你应该打破循环

或者,您可以计算得到的输入数量,并确保得到的是准确的
10
20
或任何内容。当达到该数字时,循环将在处理最后一个输入后退出。

欢迎使用SO.)

您可以安全地删除最后一个
ReadKey
。假设您正在创建一个控制台应用程序,您通常会对它进行修改。。。在控制台中——因此,在程序运行完毕后,控制台不会自动关闭。如果在控制台之外的Windows中运行控制台应用程序,情况就不同了——在这种情况下,Windows将打开一个临时控制台,运行应用程序,然后关闭控制台

此外,如果您使用的是Visual Studio,则可以使用“启动而不调试”选项(Ctrl+F5)使VS等待您。然后,VS将在最后自己添加一个“按enter键关闭”,以防止窗口关闭过快,从而允许您检查输出/异常

一个简单的解决方案是每行输出“是”或“否”值,而不是在应用程序结束时一次输出所有值

另一种方法(需要更多的编码)是读取单个键,而不是行,然后您可以对用户按Esc键做出反应,例如,而不是依赖空字符串(“额外”回车键)。

好的,您的意思是

 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();
    }

也许我知道你的意图。但是如果你想打断while(input!=string.Empty),你必须按一个空行。

你可以使用
string.IsNullOrEmpty()
ToUpper()
方法通常比
ToLower()更准确。
。因此,我可能会将您的代码重构为:

    private static void Main(string[] args)
    {
        List<string> stringList = new List<string>();
        string input = "";

        while(!string.IsNullOrEmpty(input = Console.ReadLine()))
            stringList.Add(input.ToUpper().Contains("PROBLEM") ? "yes" : "no");

        foreach (var str in stringList)
            Console.WriteLine(str);
        Console.ReadKey();
    }
private static void Main(字符串[]args)
{
List stringList=新列表();
字符串输入=”;
而(!string.IsNullOrEmpty(input=Console.ReadLine()))
添加(input.ToUpper()包含(“问题”)?“是”:“否”);
foreach(stringList中的var str)
控制台写入线(str);
Console.ReadKey();
}

顺便说一句,欢迎来到SO…;)

否则,您将如何指示所有输入的结束?在最后一句话后按
Ctrl+Z
而不是
[Enter]
?他可能在VS:P@async我知道,但这是他必须考虑的问题。至于在VS中运行它,我添加了一个技巧,应该对他有帮助。:)@Shaaman ReadKey只是为了让我能看到输出工作:P我只是在发布问题时忘了删除它:)现在我知道了没有调试的启动,thx!任务是一次输出“是”或“否”,否则我会这样做。@Yaner好吧,检查任务的人(假设他们知道自己在做什么)应该知道不应该直接从Windows运行控制台应用程序,所以。。。是的我试试看!输出应该是“是”或“否”,而不是在efter输入行之后:)赋值是输入一个文本并在每行中找到单词问题,然后一次输出每行的“是”和“否”,而不是在每行读行之后:)我不认为该注释是针对我的:P在任何情况下,我认为按两次enter键没有问题——这是正常的行为。Shaaman提供了一些关于在控制台中运行它或设置VS以按您的需要运行它的提示,但除此之外,我认为您当前的情况没有任何问题:是的,不是,我的坏:P