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

コンソールプログラムで
scanf("%s", buf);
を使用してユーザに入力された文字によって処理を行いたいのですが、このままではスペースを含む文字列がスペースの手前で切られてしまいます。
C:\Program Filesなどを入力可能にさせたい場合にはどのようにするのがベターですか?

A 回答 (3件)

お任せください!


そもそもscanfを使うというのはお勧めでは
ありません。scanfは文字+改行文字が入力
されないと完了しないためです。
が、それは良しとしましょう。
scanfの書式ですが、

int n = scanf("%[^\r\n]",buf);

という便利な書式があります。
perlでもおなじみの書式ですね。
上記の山文字"^"より前が読み込ませたい文字の集まりで、ハイフン指定が出来ます。
"^"より後ろが読込みを停止させたい文字の集まりです。上記の指定は復帰改行以外の文字が現れるまで読み込みます、という書式です。
下記のような指定も出来ます。

int n = scanf("%[a-zA-Z0-9\\: \t^\r\n]",buf);

なお、戻り値は読み込んだ項目数ですので、
if(n >= 1)
{
}
で判断できますね。
    • good
    • 4

コンソールからの入力は、fgets(buf,sizeof buf,stdin); を使います。


scanfは使い方が難しいので初心者は使わないほうがいいです。特にコンソール入力にはまず使いません。定型書式のファイルから読むときに使うくらいですが、その場合もfscanfかfgets+sscanfを使うでしょう。scanfの存在を忘れてしまってもかまわないです。
    • good
    • 0

fgetsを使うというのではだめですか?

    • good
    • 3

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

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