• ベストアンサー

複数行の入力を1つの char[] で取得するには?

例えば下のような複数行の住所を キーボード入力から 取得するにはどうすれば良いのでしょうか? char address[50]; Japan Tokyo Ueno 1-2-3 getchar() と while または for ループを使うような気がするのですが。。。 終了の入力は 「@」 です。 ちなみに 「EOF」を入力終了として使う場合はどうでしょうか?

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

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

> この場合は変換文字列が%49と言うことでしょうか? 違います。変換文字列は %49[^@] です。 ここの49は49文字まで入力するという意味です。addressが50文字までしか格納できないので、最後のナル文字の分を除いて49文字まで入力できるようにしています。もし50文字以上入力しようとすると、残りはちょん切れます。 大事なのは [^@] の部分で、これは '@' 以外の文字を入力するという意味です。

yasu182
質問者

お礼

たった一行でこんなことが出来るんですね。 ありがとうございました!

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#include <stdio.h> int main(void){ char address[50]; int i,c; for(i=0;i<50-1;i++){ c=getchar(); if(c=='@' || c==EOF){ break; } address[i]=(char)c; } address[i]='\0'; printf("%s", address); return 0; }

yasu182
質問者

お礼

getchar のバージョンありがとうございます。 とても参考になりました!

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

変数名を間違いました。 sではなく、addressでしたね。

yasu182
質問者

お礼

jacta さん、今日は2度も助けていただき ほんとにありがとうございます。 プログラミングって奥が深いんですね。 scanf は知ってますがこの code は見たこともないです (^^; この場合は変換文字列が%49と言うことでしょうか? ASCII コード表を見ましたが @ の文字コードではないようですね。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

> getchar() と while または for ループを使うような気がするのですが。。。 全て不要です。 次のようにすればOKです。 scanf("%49[^@]", s); > ちなみに 「EOF」を入力終了として使う場合はどうでしょうか? s[fread(s, 1, 49, stdin)] = '\0';

関連するQ&A