みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

空白を含んだ文字列がうまく格納(表示)できない

こんにちわ。
空白(スペース)の入った文字列の格納(表示)について質問させてください。
以下のプログラムを実行すると、空白の含む文字列がうまく表示されません。
例えば、 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

投稿日時 - 2006-04-04 13:42:12

QNo.2070950

すぐに回答ほしいです

質問者が選んだベストアンサー

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;
}

参考URL:http://shibu.jp/cppreference/stdio_details.html

投稿日時 - 2006-04-04 14:38:38

お礼

ためになる回答ありがとうございました。
scanfに関してのことすっかり忘れていました。
おかげでしたいことができました。

投稿日時 - 2006-04-16 13:49:16

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>sscanf(buf, "%s", moji);
で、"%s" の書式指定で取り込まれるのは、スペース等のホワイト文字が区切りになります。
なので、最初の"in" までがmoji に取り込まれます

全体が必要ならbuf をそのまま使えば良いような気がします。
それぞれのワードが必要なら
strtok を使って切り出すか
sscanf で次に切り出す位置(in の次)を指定してやるとかしてやればイイかと思います。

投稿日時 - 2006-04-04 14:34:48

あなたにオススメの質問