dthy
@dthy (dorrrothy)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

入力される回数が決まってないとき nullならbreakしたい

Q&A

Closed

Hello.cs
static void Main(string[] args)
        {
            var x = new List<string>();
            while (true)
            {
                var str = Console.ReadLine();
                if (str == null)//入力されなかったときbreakしたい。
                {
                    break;
                }
                x.Add(str);
            }
            foreach (var item in x) Console.WriteLine(item);
        }

このコードだと何も入力してなくてもbreakにならないです。
またnullの部分を "" にしてみたら無駄な一行が出てきてしまいます。
下のように入力すると
one
two
three

出力↓
ーーー無駄な行ーーー
one
two
three
このようになります。

どうすればこの問題を対処することができるでしょうか。

0

3Answer

ReadLine()の読み込みで改行しているだけな気がするので
出力前にコンソールのカーソルを移動してあげればよいかと。

あとReadLineで何も入力せずにEnterを押してもNullにはなりません!

if (str == string.Empty)//入力されなかったときbreakしたい。
{
    Console.SetCursorPosition(0, Console.CursorTop - 1);
    break;
}

1Like

このプログラムは練習みたいなものだと思うので、
「無駄な一行の出力なんてしていない、入力終了をReadLine()に伝えるために空行を入力する必要があるだけ」
と理解することが大事かと思います。
最後のforeachの前にConsole.WriteLine("---- ここから出力 ----");のような区切り線を挿入するのをおすすめします。

0Like

Console.ReadLine()がnullを返すのは、入力からCtrl+Zしたときです。
ただEnterを入力すると、string.Emptyを返します。

0Like

Comments

  1. @dthy

    Questioner

    ありがとうございました。
    解決できました!

Your answer might help someone💌