
環境は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ランキング
-
sscanfとscanfの違いがよくわか...
-
charと%c , %s の関係について
-
itoaわかりません
-
fgetsとsscanfを使って一行から...
-
最早開始時間と最遅完了時刻を...
-
【C++】関数ポインタの使い方
-
既定のコンストラクタがありま...
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
-
信頼区間の1.96や1.65ってどこ...
-
a^2の√=a が成り立たない場合
-
VB6.0での小数点の扱いについて
-
配列をnビットシフトする
-
数学 一次関数 関数 y=-3/4x+k(...
-
c languageで 簡単な質問があ...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
プログラムでの数字につく”f”の...
-
C言語で複数列のデータを1列の...
-
c言語で、繰り返し文の中で、0....
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
sscanfとscanfの違いがよくわか...
-
fgetsで拾われる改行文字を削除...
-
fgets関数を使用したときの文字...
-
Cで「大文字、小文字の判定」は...
-
反転した数値を表示させるやり方
-
C言語 空白の行(改行のみ)が...
-
itoaわかりません
-
C言語のステップ数をカウントす...
-
charと%c , %s の関係について
-
文字列の途中に「0」がある場...
-
C言語の勉強しています。すみま...
-
putsとputcharの違い?
-
fgetsとsscanfを使って一行から...
-
単語数のカウントについて
-
C/C++言語で日本語処理
-
CStringについて
-
C言語で16進数文字列から16進数...
-
printfの引数指定でなぜ文字列...
-
C言語(ポインタ)について
おすすめ情報