- ベストアンサー
空白を含んだ文字列がうまく格納(表示)できない
こんにちわ。 空白(スペース)の入った文字列の格納(表示)について質問させてください。 以下のプログラムを実行すると、空白の含む文字列がうまく表示されません。 例えば、 in the worldと入力しても、inしか格納されていないみたいです。それはなぜでしょうか? また、どうすればそれを格納、表示させることができるのでしょうか?教えてください。よろしくお願いいたします。 #include <stdio.h> #include <string.h> main() { char buf[BUFSIZ]; char moji[31]; int i; printf("Input string: "); fgets(buf, sizeof(buf), stdin); moji[31] = '?0'; sscanf(buf, "%s", moji); i = 0; while (moji[i] != '?0') { printf("%c",moji[i]); i = i + 1; } printf("?n"); printf("%d letters?n", i); } 【実行例】 csx01:~> gcc prog.c csx01:~> a.out Input string: in the world in 2 letters
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
sscanf()などのscanf系統の関数は、空白を読み込みません。 したがって空白で区切られた1部分だけが読み込まれ。 この場合、bufをそのまま出力すればよいです。 #include <stdio.h> int main(int argc, char **argv) { char buf[BUFSIZ]; printf("Input string: "); fgets(buf, BUFSIZ, stdin); printf(buf); return 0; }
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>sscanf(buf, "%s", moji); で、"%s" の書式指定で取り込まれるのは、スペース等のホワイト文字が区切りになります。 なので、最初の"in" までがmoji に取り込まれます 全体が必要ならbuf をそのまま使えば良いような気がします。 それぞれのワードが必要なら strtok を使って切り出すか sscanf で次に切り出す位置(in の次)を指定してやるとかしてやればイイかと思います。
お礼
ためになる回答ありがとうございました。 scanfに関してのことすっかり忘れていました。 おかげでしたいことができました。