2012-01-27 4 views
0

私はC#で行った方法にいくつか問題があります。ユーザーがyとnを入力しないようにしようとしています。私が欲しいと思っているのはほとんど機能していますが、ユーザーはまだ複数の記号を入力することができ、その後は動作しません! charが複数のcharであるかどうかをチェックするにはどうすればよいですか?私はtryParseがそれを解決したと思った?ありがとう!Char tryParseは私が思ったように動かないのですか?

// Method to check if item is food or not 
    private void ReadIfFoodItem() 
    { 
     Console.Write("Enter if food item or not (y/n): "); 

     if (char.TryParse(Console.ReadLine(), out responseFoodItem)) 
     { 
      if(Char.IsNumber(responseFoodItem)) 
      { 
       Console.WriteLine(errorMessage); 
       ReadIfFoodItem(); 
      } 
      else 
      { 
       // Set true or false to variable depending on the response 
       if ((responseFoodItem == 'y' || responseFoodItem == 'Y')) 
       { 
        foodItem = true; 
        selectedVATRate = 12; // Extra variable to store type of VAT 
       } 
       else if ((responseFoodItem == 'n' || responseFoodItem == 'N')) 
       { 
        foodItem = false; 
        selectedVATRate = 25; // Extra variable to store type of VAT 
       } 
       else 
       { 
        Console.WriteLine(errorMessage); 
        ReadIfFoodItem(); 
       } 
      } 
     } 
    } 
+3

あなたは確かにたくさんのことを望んでいます! – leppie

+1

あなたが1文字を入力するようにユーザを制限したいのであれば、単に 'Console.Read()'を使うことはできませんか? – annonymously

+0

おそらく、私はC#の新機能だと付け加えるべきです。このソリューションは最高ではありません! :) –

答えて

1

次のコードは、期待される結果が得られるという点で「機能する」ものです。あなたが1つのキーに入力を制限したい場合は、他の人がReadKeyを使用して指摘してきた

 char responseFoodItem; 

     Console.Write("Enter if food item or not (y/n): "); 

     if (char.TryParse(Console.ReadLine(), out responseFoodItem)) 
     { 
      // Set true or false to variable depending on the response 
      if ((responseFoodItem == 'y' || responseFoodItem == 'Y')) 
      { 
       Console.WriteLine("foodItem = true"); 
      } 
      else if ((responseFoodItem == 'n' || responseFoodItem == 'N')) 
      { 
       Console.WriteLine("foodItem = false"); 
      } 
      else 
      { 
       Console.WriteLine("Unrecognised input"); 
      } 
     } 
     else 
     { 
      Console.WriteLine("Invalid input"); 
     } 

は、よりよい解決策です。また、ユーザーが入力を受け入れるためにReturn/Enterキーを押す必要がないことも意味します。

0

char.TryParse単に引数として指定された文字列を解析しようと、それはあなたがコンソールに入力Console.ReadLineを使用できる文字数を制限しません。

によって返された文字列に1文字が含まれていないため、ユーザーが複数の文字を入力すると、char.TryParseが失敗します。

代わりConsole.Readを使用する必要があります。

+0

こんにちは、私はConsole.Readを使用するためにあらゆる種類の組み合わせを試していますが、私はいつもen ren underlineを取得しますか?何が間違っていますか? –

0

は、どのように私はcharは、複数の文字である場合もチェックすることができますか?

string line = Console.ReadLIne(); 
If(!string.IsNullOrEmpty(line) && line.Length > 1) 

代わり単一チャー使用Console.ReadChar()を読み取ります。

0

Console.ReadLineは、ユーザーが入力した任意の長さとプレスの文字列を入力することができます。

charが複数のcharであるかどうかを確認するにはどうすればよいですか?私はtryParseがそれを解決したと思った? the manual pageから

はそれと同等のUnicode文字に指定した文字列の値を変換します。リターンコードはsパラメータがnullまたはSの長さは1

でない場合、変換に失敗した....変換が成功したか失敗したかを示しますがConsole.ReadKey代わりのReadLineメソッドを使用してみました?

0

は...............

ユーザーはあなたが

...... 
private void ReadIfFoodItem() 
{ 
string answer=string.empty; 
Console.Write("Enter if food item or not (y/n): "); 
answer=Console.ReadLine() 
if (answer.lenght>=1)) 
    { 
      //error 
      ....... 
    } 

代わりに使用Char.TryParseの文字列の長さをチェックすることができ、よりそれから1つの文字を挿入していることを確認するには

0

利用Console.ReadKey()文字の量を制限します。あなたがYかNを持っているかどうかをテストするには、ASCIIコードを比較するか、正規表現を使用します。

+0

Console.Read()を使用すると、コードの下に赤い線が表示されます。 –

+0

SorryはReadKeyを意味しました – CSharpened

1

charは、単一の文字を表し、そうHow can I do to also check if char is more than one char? I thought the tryParse solved that?TryParseがしようとすると、あなたの入力から単一の文字を解析し、値がnullであるか、長さを持っている場合、明示的に失敗するだろう...少し無意味なようです> 1.

文字をチェックする代わりに、文字列をチェックするだけです。:

string line = Console.ReadLine(); 
switch (line.ToUpperInvariant()) 
{ 
    case "Y": 
     // Do work for y/Y 
     break; 
    case "N": 
     // Do work for n/N 
     break; 
    default: 
     // Show error. 
     break; 
} 
0

Console.ReadKeyを試すことができます これはユーザーのためのキーストロークの1つで、複数の文字は存在しません。

0

なぜ入力文字列と比較しないのですか?
比較を単純化してみませんか?

using System.Linq; 

private static string[] ValidAnswers = new string[]{ "y", "yes" }; 

// Method to check if item is food or not 
private void ReadIfFoodItem() { 
    Console.Write("Enter if food item or not (y/n): "); 
    string ans = Console.ReadLine(); 
    // Checks if the answer matches any of the valid ones, ignoring case. 
    if (PositiveAnswers.Any(a => string.Compare(a, ans, true) == 0)) { 
     foodItem = true; 
     selectedVATRate = 12; // Extra variable to store type of VAT 
    } else { 
     foodItem = false; 
     selectedVATRate = 25; // Extra variable to store type of VAT 
    } 
} 

また、他の人が言ったように、Console.ReadKey()を使用することもできます。