競技プログラミングの練習用のごくごく入門の問題を解いていたのですが、つまづいてしまったので質問です。
タイトル長くなりましたが、この場合どのように検索したらよかったのでしょう。
「C言語 空白複数入力」とか「C言語 スペース 入力」とかいろいろ検索してみましたが、解決方法が見つからず。
どのような入力パターンかというと。
4 1 3 5 2
6 7 1 3 5 2 4
このようなパターンです。
最初の数字が個数で、改行の入力であればforで回せば取得できるというのは知っていたのですが、空白入力の書き方が、入力数固定以外で知らなかったので、また検索仕方がわからなかったので、質問させていただきました。
ご指摘を受けて。
タグを修正しました。
scanfは改行も空白も同じであるとわかりました。
C++を競技プログラミングは採用しているので、C++らしいコードを書いた方がいいとご指摘を受けました。
今後競技プログラミング以外での使用を考えたときにはscanfではない方がいいということがわかりました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答5件
0
ベストアンサー
実用性はないが競プロに限ってゴリ押しするなら
scanfは「空白・タブも改行と同じ区切り文字として扱う」ので
適当でもどうにかなる
c
1#include <stdio.h> 2#include <stdlib.h> 3 4main(){ 5 int mx; 6 int *buf; 7 scanf("%d", &mx); 8 buf = malloc(mx * sizeof(*buf)); 9 for(int i = 0;i < mx; i++) 10 scanf("%d", buf+i); 11 // とりあえず、最終入力を表示 12 printf("=> %d\n", buf[mx - 1]); 13}
投稿2018/03/16 15:27
総合スコア15149
0
c言語であれば、strtok関数が使えると思います。
c++であれば、std::string::splitやstd::getlineが使えそうです。
「文字列 分割 空白」で検索しました。
投稿2018/03/16 14:31
総合スコア7196
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
素直にstd::cinではいけませんか?
c++
1#include <iostream> 2#include <string> 3 4int main(void){ 5 std::ios_base::sync_with_stdio(false); 6 int n; 7 std::cin >> n; 8 9 std::string value; 10 for (auto i=0; i<n; i++) { 11 std::cin >> value; 12 std::cout << value << std::endl; 13 } 14 return 0; 15}
C言語の質問でしたか…
C++でもscanfの方がはやいからという理由で使われる方がいるようです。
std::ios_base::sync_with_stdio(false)
を入れることでstd::in
を速くできます。
https://www.geeksforgeeks.org/fast-io-for-competitive-programming/
https://www.geeksforgeeks.org/cincout-vs-scanfprintf/
投稿2018/03/16 15:27
編集2018/03/16 15:47総合スコア8562
0
scanfなのに質問のタグがCではなくC#とC++、というのが解せないところではありますが。
競技プログラミングで変なデータが入ってないことが前提だったら、必要な回数分だけ
C
1/* int num; */ 2scanf("%d", &num);
を繰り返す手法でもいいんじゃないでしょうか。
投稿2018/03/16 15:23
総合スコア366
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
C言語の場合、入力にscanfを使うというのは筋が悪いです。
fgetsを使えば、1行の文字列が取得できますんで、その文字列を処理していろいろ出すのがいいと思います
投稿2018/03/16 14:36
総合スコア88163
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/16 17:09

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/16 15:39
2018/03/16 15:44
2018/03/16 15:51