- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:fgetsとsscanfを使って一行から複数入力)
fgetsとsscanfを使って一行から複数入力
このQ&Aのポイント
- C言語環境で、fgetsとsscanfを使用して一行から複数の文字列を入力する方法について質問があります。
- fscanfを使用せずに、fgetsとsscanfを組み合わせることで一行から不定数の文字列を入力する方法を試しているが、うまくいかない。
- 質問に示されたコードのループで、fgetsとsscanfを使用して文字列を読み込んでいるが、うまくいかないため、解決策を求めている。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#include <string.h> #include <ctype.h> #include <stdio.h> char temp[1024], buf[1024]; void main(void) { char *p; while(fgets(buf, 1024, stdin) != NULL){ p = buf; while(sscanf(p, "%s",temp) != EOF){ printf("%s ", temp); p += strlen(temp); while ((*p) && (isspace(*p))) p++; } } } ・fgetsの引数が間違っている(bufとstdinが逆) 40点減点 ・括弧閉じが1つ多い 40点減点 ・bufからsscanfしても常に同じ文字列しか読み込まないので自分でポインタを進めないといけないのをやってない 5点減点 100点満点で15点。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.4
「行頭の空白文字」は「大量」じゃなくてもダメじゃないかなと無意味な突っ込みをしてみる>#3. %n?
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
回答No.3
もう1つ。「入力した行の先頭に半角スペースが大量にあった時」に対処してないので、自分で直してみましょう。
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19841)
回答No.2
因みに、1行が1024バイト以上の場合1024バイト目と1025バイト目にまたがる文字列が2つに分離してしまうバグがあるが、対処してない。 fgetsで一定の文字列を読み込む場合は、本当であれば、読み込んだ行の末尾に'\n'があるかどうかで、1行の終わりまで読み込んだか、1行がバッファサイズよりも長くて読み込まれていない続きがあるか、判定して処理を変えるべき。