アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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;
}

参考URL:http://shibu.jp/cppreference/stdio_details.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/16 13:49

>sscanf(buf, "%s", moji);


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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A