C言語関係掲示板

過去ログ

No.574.scanf で this is a pen を読む

[戻る] [ホームページ]
No.5337

scanfの疑問
投稿者---tem(2003/02/23 00:22:46)


はじめまして、このページを参考にしてCの勉強をさせてもらっているtemと言います。 
Cの勉強を進めていくに連れて、ちょっと疑問に思ったことがあります。
scanfなんですけど、例えばこのページの例に出ているように、 
scanf("%s",配列名);  
とすれば、文字列は配列に格納できますよね。
でも注意に載っている This is a pen のような空白を含む文章はThisしか読めないんですよね? でもなんかの本に%cなら空白も読む!らしきことがかかれてて、自分も変換文字cについて調べたりしてなんとかしてThis is a penが読めないものかしているのですが、なかなか・・。
そこで質問です。scanf では this is a pen は読めないのでしょうか?
またどのように表記すれば読めるのでしょうか?
getsを使えば良いのはわかってるんですが、なんとなく気になって・・^^;
ヨロシクお願いします。


No.5338

Re:scanfの疑問
投稿者---a(2003/02/23 01:18:17)


    char buf[256];char c;
    int i;
    for(i=0;i<255 && c!='\n';i++){
        scanf("%c",&c);buf[i]=c;
    }
    buf[i]='\0';
    printf("%s",buf);



この投稿にコメントする

削除パスワード

No.5339

Re:scanfの疑問
投稿者---かずま(2003/02/23 01:33:11)


> そこで質問です。scanf では this is a pen は読めないのでしょうか?
> またどのように表記すれば読めるのでしょうか?
> getsを使えば良いのはわかってるんですが、なんとなく気になって・・^^;

gets() の代わりですか。
#include <stdio.h>

int main(void)
{
    char buf[256];

    if (scanf("%255[^\n]", buf) == 1)
        puts(buf);
    return 0;
}


No.5340

Re:scanfの疑問
投稿者---a(2003/02/23 01:58:34)


>if (scanf("%255[^\n]", buf) == 1)
最大フィールド幅を使えばいいんですね

No.5341

Re:scanfの疑問
投稿者---tem(2003/02/23 03:34:47)


なるほど!
if (scanf("%255[^\n]", buf) == 1)
これは改行以外の文字列を255文字読み込むということですかね。
aさん、かずまさん、ありがとうございました。
フィールド幅・スキャンセットの勉強になりました。


No.5344

Re:scanfの疑問:追加質問!
投稿者---tem(2003/02/23 20:43:15)


実際にプログラムを動かして遊んでいて、さらに疑問になったのですが、
出力する際にputs(buf); や printf("%s",buf); としていますよね。
a さんのプログラムで、一文字ずつ出力しながら単語ごとに出力しようとした場合、例えば・・
入力:this is a pen
出力: this
is
a
pen
としたい場合、

char buf[256];char c;
int i;
for(i=0;i<255 && c!='\n';i++){
scanf("%c",&c);buf[i]=c;
}
buf[i]='\0';

  /***********以下自分なりに考えました**************/
  i=0; 
  while(buf[i]!='\n') {

if(isspace(buf[i])) printf("\n");

else printf("%s",buf[i]);

i++;
}
としたら、動かなくなってしまいました。
どこが悪いのでしょうか?(初心者的な質問でスミマセン。勉強始めたばっかな者なんで・・)
また、aさんのプログラムを元にどのようにしたら単語ごとに出力できるのでしょうか?ヨロシクお願いします。



No.5345

Re:scanfの疑問:追加質問!
投稿者---a(2003/02/23 21:19:33)


i=0;
while(buf[i]!='\0') {
   if(isspace(buf[i])) printf("\n");
   else printf("%c",buf[i]);
   i++;
}


No.5348

Re:scanfの疑問:追加質問!
投稿者---tem(2003/02/23 22:58:20)


あ、そっか、文字出力cと文字列出力s・・
スミマセンでした。有難うございましたm(__)m