単語出力

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
研修生

単語出力

#1

投稿記事 by 研修生 » 16年前

入力した単語を一行ずつに1つずつ表示するプログラムを組んでいるのですが
わからなくなったのでご質問します。
※単語はスペースで一区切りにしています。
例 abc edf fgだと
abc
edf
fgと出力されます。
int main()
{
  int c;
  char s[1000];
  for(int i = 0; c == '\n'; i++){
    c = getchar()
       if(c== ' ' || c == '\n'){
          s = '\0';
          printf("%s\n", s);
          shokika(s);
       }
       else{
         s = c;
         
       }
  }

   return 0;
}

void shokika(char s[/url])
{
   int len = strlen(s);
   for(int i = 0; i < len; i++){
      s = ' ';
   }
}

また変なプログラムになってしまいましたが・・
aa aaと入力すると最初の方しか入っておらず対処方法がわかりません。
教えて下さい。

Mist

Re:単語出力

#2

投稿記事 by Mist » 16年前

> for(int i = 0; c == '\n'; i++){

ソースコードは実行しているものと一致していますか?

cが不定値な上にforの継続条件が「c == '\n'」では相当運がよくないとforに入らないですが。
前回も指摘ありましたがfor文の使い方を再学習されては?

研修生

Re:単語出力

#3

投稿記事 by 研修生 » 16年前

for(int i = 0; c != '\'n; i++)でした・

Mist

Re:単語出力

#4

投稿記事 by Mist » 16年前

s配列を紙に書いて、自分がコンピュータになったつもりでプログラムを一行ずつ読んで配列のデータを書き換えてみることをお勧めします。

ヒントは「s = c;」です。

non

Re:単語出力

#5

投稿記事 by non » 16年前

shokika(s);
でやりたいことがわからない。
試しに、この行の代わりに、
i=0;って書いたらどうなる?(またはi=-1)

研修生

Re:単語出力

#6

投稿記事 by 研修生 » 16年前

よくわからないけどa aと入力すると
a
aaと返ってくるからどこかおかしい・・

Blue

Re:単語出力

#7

投稿記事 by Blue » 16年前

#include <stdio.h>

int main()
{
    int c;
    while (1)
    {
        c = getchar();
        if (c == EOF || c == '\n') 
        {
            putchar('\n');
            break;
        }
        if (c == ' ') {
            putchar('\n');
        }
        else {
            putchar(c);
        }
    }
    return 0;
}

研修生

Re:単語出力

#8

投稿記事 by 研修生 » 16年前

ab cdと入力すると
最初
s[0] = 'a';
s[1] = 'b';
s[2] = '\0';

2回目
s[0] = ' ';
s[1] = ' ';
s[2] = ' ';
s[3] = 'c';
s[4] = 'd';

となってるのかな。うーむ

non

Re:単語出力

#9

投稿記事 by non » 16年前

>よくわからないけどa aと入力すると
>a
>aaと返ってくるからどこかおかしい・・

i=-1;にしたらどうだったの?

研修生

Re:単語出力

#10

投稿記事 by 研修生 » 16年前

-1だと正しい感じになりますね。

non

Re:単語出力

#11

投稿記事 by non » 16年前

動けばいいのなら、これで終わりだけど、
結局、次の単語にするときにi=0にする必要があるということです。
で、なんでi=-1なのかというと、forが+1するからですね。
つまり、他の方が言われるように、forの使い方に問題があるわけです。
この問題なら使わない方がわかりやすいです。

初級者

Re:単語出力

#12

投稿記事 by 初級者 » 16年前

昨日だれかが提示したソースを1箇所だけ修正すればOKです。
応用力の問題。


#include <stdio.h>

enum { NON_BLANK, BLANK, BLANKS };

int main(void)
{
    int c, mode = NON_BLANK;

    while ((c = getchar()) != EOF) {
        if (c != ' ') {
            switch (mode) {
            case BLANK: case BLANKS:
                putchar('\n');
                /* fall thru */
            case NON_BLANK:
                putchar(c);
                mode = NON_BLANK;
                break;
            }
        }
        else {
            switch (mode) {
            case NON_BLANK:
                mode = BLANK;
                break;
            case BLANK: case BLANKS:
                mode = BLANKS;
                break;
            }
        }
    }
    return 0;
}

閉鎖

“C言語何でも質問掲示板” へ戻る