- ベストアンサー
scanf("%s", buf);でスペースを含んだ文字
コンソールプログラムで scanf("%s", buf); を使用してユーザに入力された文字によって処理を行いたいのですが、このままではスペースを含む文字列がスペースの手前で切られてしまいます。 C:\Program Filesなどを入力可能にさせたい場合にはどのようにするのがベターですか?
- みんなの回答 (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) { } で判断できますね。