• ベストアンサー

C#の質問

コンソールからの入力で2つの整数を取得したいのですが、 下記のように、2行に渡って取得する他ないのでしょうか? Console.WriteLine("何行何列ですか?"); int gyou = Convert.ToInt32(Console.ReadLine()); int retu = Convert.ToInt32(Console.ReadLine()); 私としましては、ユーザーに2,3のように1行で入力してもらって、 gyouには2をretuには3を保存したいのですが・・・。 そんなことは可能でしょうか? どなたかご教授お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • x415f484f
  • ベストアンサー率71% (57/80)
回答No.4

ご質問なさる時はお使いの環境を書いたほうがよろしいかと思います。 # 正しい回答が欲しいならOS や開発環境などを必ず書くべきです。 ANo.2 の補足から引用 > 普通配列を宣言・初期化するときは、 > string[] split = new buf[要素数]{初期値, ・・・}; > でしますよね? あなたが仰っているのは string[] split についてかと思われますが > なんで、buf.Split(new Char[] { ',' });でsplitの宣言・初期化 > できるんですか?? 落ち着いてよく見ましょう、Split() の引数は char 配列となっていて new char[] {','} は、丁寧に引数の配列の初期化をしているだけです。 また、配列は Split() で割り当てされます。 string[] split = Console.ReadLine().Split(','); のように書いても可能ですが。 ちなみに Split() の引数は char[] 以外に他にもあります。 # というか、まずマニュアルを見るべきでしょう。 ANo.1 の補足から引用 > 数字以外の物が入力された時にエラー表示を出すにはどうすれば > よいのでしょうか? TryParse がありますが、前述のようにあなたのお使いの環境についての 記述がないので、動くかどうかはわかりません。 # TryParse が使えない場合は Try, Catch 等で対処可能です。 文字列を数値に変換するには?(TryParse編)[2.0のみ、C#、VB] - @IT http://www.atmarkit.co.jp/fdotnet/dotnettips/408tryparse/tryparse.html その他の入力数値の最大・最小のチェックは if 等で条件分岐処理すれば済みます。 # これについてのご質問であれば承りますが、他のご回答者の方の回答の # 説明ですので私へのお礼などは要りません。 # あなたが望むものであった場合は、私以外のご回答者の方にお礼をする # べきです。

その他の回答 (5)

回答No.6

#No.5です。 >string str = new string(new char[]{'1','2'}); >の意味がわかりません。 string はクラスです。なので、 string str=new string(new char[]{'1','2'}); のように、オブジェクトを作らなければなりません。 しかし、これでは面倒なので、 string str="12"; のように文字列を代入できるようになっています。 >配列の初期化じゃないのになぜnew演算子をつかっているんですか? クラス(参照型)や、配列などは、new演算子などでオブジェクトを生成して、初期化とかしないといけません。 (ただし、string型やobject型のような一部のクラスはnewでオブジェクトを生成しなくても良いし、することが出来ないものもある。) 構造体(値型)はnew演算子でオブジェクトを生成できますし、newしなくてもできます。ただし、インターフェイスを継承した場合は、new演算子でオブジェクトを作成しないといけません。

回答No.5

>string[] split = buf.Split(new Char[] { ',' }); >が分からないんですよね。 例えば、 string str = new string(new char[]{'1','2'}); これってつまり、 string str="12"; ということです。 string []sprit=buf.Split(new Char[]{','}); は戻り値がstring型の配列なので、文字列の中に','があったとき、string 型の配列を作成して、','で分けた文字列をspritに返すと考えればわかり易いかもしれません。 とりあえず、適当にサンプル作ってみました。 bool b = false; do { try { b = true; Console.WriteLine("数値を入力してください 例:数値,数値"); string[] split = Console.ReadLine().Split(new char[]{','}); int gyou = Convert.ToInt32(split[0]); int retu = Convert.ToInt32(split[1]); Console.WriteLine("gyou={0},retu={1}", gyou, retu); } catch { b = false; Console.WriteLine("数値を入力してください"); } } while (b==false);

TAN2005
質問者

補足

string str = new string(new char[]{'1','2'}); の意味がわかりません。 配列の初期化じゃないのになぜnew演算子をつかっているんですか?

  • _himajin_
  • ベストアンサー率65% (128/195)
回答No.3

前提として、私はC#使ったことも勉強したこともないので間違った答えかもしれません。 string 型の配列を格納する変数(誤解を恐れず言えば string[] 型の変数) split を定義して、その内容として String.Split() の戻り値を受けているだけです。 配列自体は初期化してません。 分離すると↓ string[] split; split = buf.Split(...); MSDNのサンプルでこのように使っているので、実体は String.Split() の中で作られているものと判断しました。

  • _himajin_
  • ベストアンサー率65% (128/195)
回答No.2

参考URL載せ忘れてましたので、↓を見てください。 http://msdn.microsoft.com/ja-jp/library/b873y76a(VS.80).aspx ここの使用例から少し改変して例示させていただいただけなので、詳しく説明はできないのですが Console.ReadLine() で読んだ buf を区切り文字として ',' で分割して string の配列 split に入れているつもりです。 エラー処理に関しては Convert.ToInt32 のサンプル↓が参考になるのではないでしょうか。 http://msdn.microsoft.com/ja-jp/library/sf1aw27b(VS.80).aspx

TAN2005
質問者

補足

どうしても、 string[] split = buf.Split(new Char[] { ',' }); が分からないんですよね。 普通配列を宣言・初期化するときは、 string[] split = new buf[要素数]{初期値, ・・・}; でしますよね? なんで、buf.Split(new Char[] { ',' });でsplitの宣言・初期化できるんですか??

  • _himajin_
  • ベストアンサー率65% (128/195)
回答No.1

Console.ReadLine() で受け取った文字列を、',' までを文字列1、それ以降を文字列2に分割してあげれば可能なはずです。 String.Split() で文字列の配列として受け取れるようなので、これでできるんじゃないでしょうか。 // C#使ったことないので動くかどうかはわかりません。 // ついでにエラーチェックもいれてないのであくまでも参考程度にどうぞ string buf = Console.ReadLine(); string [] split = buf.Split(new Char [] {','}); int gyou = Convert.ToInt32(split[0]); int retu = Convert.ToInt32(split[1]);

TAN2005
質問者

補足

string[] split = buf.Split(new Char[] { ',' }); この行の意味がイマイチ分からないのですが詳しく教えていただけませんか? また、数字以外の物が入力された時にエラー表示を出すにはどうすればよいのでしょうか?

関連するQ&A

専門家に質問してみよう