質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

11364閲覧

C#の標準入力からの読み取りについて

aoshanghai

総合スコア24

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/07/31 02:29

C#の標準入力からの読み取りについてです。

例えば、標準入力から
1 2 3
といったように、3つの数値がスペースを間に
入れる形で、入力されるとします。

これを読み取る際に、例えば、C++ですと、
cin >> w >> h >> n;
としたり、Cですと、
fgets(str, sizeof(str), stdin);
sscanf(str, "%d %d %d", &w, &h, &n);
などで読み取り可能だと思います。

C#についてですが、少し試した限りでは
line = System.Console.ReadLine();
stArrayData = line.Split(' ');
w = int.Parse(stArrayData[0]);
h = int.Parse(stArrayData[1]);
n = int.Parse(stArrayData[2]);
といったように、文字列で読み込んで、
それをSplitで分割して数値に変換する
という方法で、一応、可能かと思います。

しかしながら、C++やCと比べると、手間が
かかっているとは思います。
なので、もしかしたら、sscanfみたいな関数が
C#であるのかもしれないと思いまして、ネット上で
検索しているのですが、今の所特に見つかっておりません。

ということで、C#で、
1 2 3
といったような空白を含んだ標準入力からの
読み取りについて、詳しい方がおられましたら、
ご教示頂けると助かります。

補足です。
さらに検索していた所、
https://ufcpp.net/study/csharp/ap_reverse.html
このサイトで、Cのscanfみたいなことをするには、
・正規表現を使う
・Splitを使う
といったような2つの方法が提示されているのを見つけました。

どうぞよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

C言語でのscanf関数というのは実際の業務では使われることはありません。
これは危険な関数ですので、これを使おうとは思わないことです。

で、C#でするんなら、おっしゃるような方法でいいかと思います。

投稿2018/07/31 02:32

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoshanghai

2018/08/01 07:38

ご回答ありがとうございました。
guest

0

ベストアンサー

.C#の場合だとおっしゃる通りでいいと思います。
実際、私も今まで、空白区切りのデータを処理するとき、split関数を用いています。
(Javaでも同じことをやっています。)
ただ、私の場合、文字列stringから整数型intにパースするとき、あらかじめ用意した配列に整数型のデータを格納するようにしています。
そして、for文を使って、短く書くようにしています。(少しは手間が省けると思います。)

C#

1using System; 2 3public class Sample1{ 4 public static void Main(){ 5 6 string line = System.Console.ReadLine(); 7 string []stArrayData = line.Split(' '); 8 int []data = new int[stArrayData.Length]; 9 10 for(int i = 0; i < stArrayData.Length; i++){ 11 data[i] = int.Parse(stArrayData[i]); 12 Console.WriteLine(data[i]); 13 } 14 15 } 16}

投稿2018/07/31 09:34

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoshanghai

2018/08/01 07:38

ご回答ありがとうございます。 大変参考になりました。 また、整数型の配列を用意するなどの工夫をすることによって、 コードを短くすることが可能という点についても、大変勉強になりました。 ありがとうございました!
guest

0

出力が配列になってしまいますが、Linq を用いた以下のようなコードなら少しだけシンプルになるかもしれません。

C#

1//using System.Linq; 2var inputs = System.Console.ReadLine() 3 .Split(' ') 4 .Select(s => int.Parse(s)) 5 .ToArray(); 6 7// 入力>10 20 30 8 9Console.WriteLine(inputs[0]); // 10 10Console.WriteLine(inputs[1]); // 20 11Console.WriteLine(inputs[2]); // 30

投稿2018/07/31 08:27

R.Mizukami

総合スコア1086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoshanghai

2018/08/01 07:38

ご回答ありがとうございます。 大変参考になりました。 Linqについても大変勉強になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問