
環境はC言語です。
一行から不定数の文字列を入力したいと考えています。
fscanfは使わずに、fgetsとsscanfを使って実現させたいと考えています。
以下ではうまくいきませんでした。
--sorce--
char temp[1024], buf[1024];
while(fgets(stdin, 1024, buf) != NULL)){ //ファイルで標準入力でもどっちも可能
while(sscanf(buf, "%s",temp) != EOF){
printf("%s ", temp);
}
}
--input--
red blue black yellow white red
red red black yellow
white blue
red blue blue
--理想output--
red blue black yellow white red red red black yellow white blue red blue blue
よろしくおねがいします。
No.1ベストアンサー
- 回答日時:
#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点。
No.2
- 回答日時:
因みに、1行が1024バイト以上の場合1024バイト目と1025バイト目にまたがる文字列が2つに分離してしまうバグがあるが、対処してない。
fgetsで一定の文字列を読み込む場合は、本当であれば、読み込んだ行の末尾に'\n'があるかどうかで、1行の終わりまで読み込んだか、1行がバッファサイズよりも長くて読み込まれていない続きがあるか、判定して処理を変えるべき。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgets関数を使用したときの文字...
-
sscanfとscanfの違いがよくわか...
-
CStringのFindで文字列検索を行...
-
文字列中に含まれる文字の個数...
-
Cで「大文字、小文字の判定」は...
-
C言語のステップ数をカウントす...
-
「Aに対するBの割合」と「Aに対...
-
DWORDの実際の型は何でしょうか
-
Aの値からBの値を除するとは??
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
ある商品のロス率を5%見込み、...
-
複数桁10進数の*桁目だけを抽出...
-
Enterキーを押されたら次の処理...
-
エクセルで可視セルにのみ値貼...
-
プログラミング初心者です。 Py...
-
2÷3などの余りについて
-
C言語のfor文です。 繰り返しの...
-
コマンドプロンプトがすぐ消える
-
#define _CRT_SECURE_NO_WARNIN...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgets関数を使用したときの文字...
-
sscanfとscanfの違いがよくわか...
-
fgetsで拾われる改行文字を削除...
-
CStringのFindで文字列検索を行...
-
charと%c , %s の関係について
-
C言語のステップ数をカウントす...
-
反転した数値を表示させるやり方
-
C言語 空白の行(改行のみ)が...
-
Cで「大文字、小文字の判定」は...
-
putsとputcharの違い?
-
1行の文字列を時間差で表示する...
-
C言語 strlen 再入力を促す
-
str[j++]の意味
-
C言語、単語ごとに改行したい
-
C言語の初心者です。これを実行...
-
C言語:配列の中の文字を。。。
-
プログラムのことで
-
文字列の操作
-
gets fgetsについて
-
fgetsでバッファ残留文字列を無...
おすすめ情報