2017-06-06 11 views
0

ファイルからテキストを読み取るC#コンソールアプリケーションコードがここにあります。 ユーザーが値を入力すると、その値を含む行をファイルから検索します。私の場合は は、部屋番号を尋ねてきますコンソールは、コンソールは、「それが書き込まれますように私はそれを作るにはどうすればよい「」数はとのスプリットをthatsの部屋のためにC#コンソールアプリケーションがwhileループで無効な入力を表示しています

class Program 
{ 
    static void Main(string[] args) 
    { 
     int counter = 0; 
     string line; 
     string roomNumber; 

     Console.WriteLine("Enter room number"); 
     roomNumber = Console.ReadLine(); 
     // Read the file and display it line by line.    
     System.IO.StreamReader file = new 
       System.IO.StreamReader("room.txt"); 
     while ((line = file.ReadLine()) != null) 
     { 
      string[] words = line.Split(','); 
      if (roomNumber == words[1]) 
      {     
       Console.WriteLine(line); 
      }    
       counter++; 
     } 

     file.Close(); 

     // Suspend the screen.    
     Console.ReadLine(); 
     } 
    } 
} 

をroom.txtを検索します無効な部屋番号 "を入力し、部屋番号を尋ねるまでループバックします。

+5

これは宿題の割り当てのように非常によく見えます... –

答えて

2

do whileループを使用すると、行が見つかったかどうかを指定するブール値をチェックし、値が見つかった場合にのみループを終了することができます。

class Program 
{ 
    static void Main(string[] args) 
    { 
     int counter = 0; 
     bool lineFound = false; 
     string line; 
     string roomNumber; 

     do 
     { 
      Console.WriteLine("Enter room number"); 
      roomNumber = Console.ReadLine(); 
      // Read the file and display it line by line.    
      using (StreamReader file = new StreamReader("room.txt")) 
      { 
       while ((line = file.ReadLine()) != null) 
       { 
        string[] words = line.Split(','); 
        if (roomNumber == words[1]) 
        {     
         Console.WriteLine(line); 
         lineFound = true; 
        }    
         counter++; 
       } 

       if(!lineFound) 
       { 
        Console.WriteLine("Invalid room number"); 
       } 
      } 

     } while(!lineFound); 

     // Suspend the screen.    
     Console.ReadLine(); 
     } 
    } 
} 
+0

私はここでカウンタとして 'int'の代わりに' boolean'を使うことを推奨します。 –

+0

ありがとう、これはトリックでした! –

+0

@Hofmanの記載に従って使用することをお勧めします – jamiedanq

3

私は、一度にファイル全体を読んで、それから可算を構築し、最初のマッチを見つけるためにしようとするだろう:

bool found = false; 

do 
{ 
    Console.WriteLine("Enter room number"); 
    string roomNumber = Console.ReadLine(); 

    using (StreamReader file = new StreamReader("room.txt")) 
    { 
     string str = file.ReadToEnd(); 
     string[] rooms = str.Split(new char[] { '\r', '\n', ',' }, StringSplitOptions.RemoveEmptyEntries); 

     if (!rooms.Any(room => room == roomNumber)) 
     { 
      Console.WriteLine("Invalid room"); 
     } 
     else 
     { 
      Console.WriteLine($"Found room {roomNumber}"); 
      found = true; 
     } 
    } 
} 
while (!found); 

このコードは、あなたの入力配列の最初の試合(Any)を見つけるためにLINQを使用しています。部屋を見つけたらメッセージを表示します。 usingにも注意してください。これにより、例外が発生した場合でもファイルストリームがうまく閉じます。

+2

質問と両方の答えをdownvoteする理由はありますか? –

+0

あなたは、無効な部屋が表示された後に部屋番号を尋ねる行に戻って欲しいと言ったところを逃したと思います。 – jamiedanq

+1

@jamiedanqあなたが正しいかもしれません。更新しました。 –

関連する問題