• ベストアンサー

scanf("%s", buf);でスペースを含んだ文字

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

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

  • ベストアンサー
  • nobe
  • ベストアンサー率66% (59/89)
回答No.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) { } で判断できますね。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.2

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

  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.1

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

関連するQ&A