[解決済み] scanf()を使って、改行が見つかるまで入力から読み込むにはどうしたらいいですか?
2022-01-28 12:02:24
質問
C言語で、入力からスペースがあるまで読み、その後ユーザーがエンターキーを押すまで読むという作業を頼まれたのですが、どうすればいいですか? このようにすると
scanf("%2000s %2000s", a, b);
1番目のルールに従いますが、2番目のルールには従いません。
と書くと
私は賢い
私が得るものは同等である。
a = "I"。
b = "am"。
しかし、それはそうでなければならない。
a = "I"。
b = "am smart"。
すでに試しました。
scanf("%2000s %2000[^\n]\n", a, b);
そして
scanf("%2000s %2000[^\0]\0", a, b);
1つ目では、ユーザーが Ctrl + D (EOFを送信するため)そしてそれは私が望むものではありません。 2番目のものでは、コンパイルできません。コンパイラによると
警告: '%[' フォーマットの終了 ']' がありません。
何か良い解決方法があれば教えてください。
どのように解決するのですか?
scanf
(およびその仲間)には、ちょっと奇妙な特徴があります。書式文字列の(ほとんどの場所にある)空白が、入力の任意の量の空白と一致するのです。たまたま、少なくともデフォルトの "C" ロケールでは、改行がホワイトスペースとして分類されるのです。
つまり、末尾の
'\n'
だけでなく
a
改行だけでなく、その後に続くすべての空白文字も同様です。入力の終わりを告げるか、空白でない文字を入力するまで、マッチしたとはみなされません。
その対処法として、次のようなものがあります。
scanf("%2000s %2000[^\n]%c", a, b, c);
if (c=='\n')
// we read the whole line
else
// the rest of the line was more than 2000 characters long. `c` contains a
// character from the input, and there's potentially more after that as well.
また、状況によっては
scanf
これは、成功した変換の数を教えてくれます。この場合、以下のものを探します。
3
は、すべてのコンバージョンが成功したことを示します。
関連
-
[解決済み】stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み】C言語で「関数の型が競合しています」と表示される、なぜ?
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み] [Solved] なぜこのようなエラーが発生するのでしょうか。「データ定義に型またはストレージクラスがない」?
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み] [Solved] .Cファイルをコンパイルしています。アーキテクチャ x86_64 の未定義シンボル
-
[解決済み] エラー: `itoa` はこのスコープで宣言されていません。
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み】警告:式の結果が未使用の場合
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】valgrind - サイズ8のブロックが割り当てられた後、アドレス ---- が0バイトになる。
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】警告。この関数ではXが初期化されていない状態で使用される可能性があります。
-
[解決済み】Cygwin - Makefile-error: ターゲット `main.o' のレシピに失敗しました。
-
[解決済み] struct で "warning: useless storage class specifier in empty declaration" (警告: 空の宣言での無駄なストレージクラス指定子)
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[解決済み】「構造体でもユニオンでもないものにメンバー'*******'を要求する」とはどういう意味ですか?
-
[解決済み】「複数の定義」「最初に定義されたのはここです」エラーについて
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。