ページ 1 / 1
単語出力
Posted: 2009年5月14日(木) 15:50
by 研修生
入力した単語を一行ずつに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と入力すると最初の方しか入っておらず対処方法がわかりません。
教えて下さい。
Re:単語出力
Posted: 2009年5月14日(木) 15:56
by Mist
> for(int i = 0; c == '\n'; i++){
ソースコードは実行しているものと一致していますか?
cが不定値な上にforの継続条件が「c == '\n'」では相当運がよくないとforに入らないですが。
前回も指摘ありましたがfor文の使い方を再学習されては?
Re:単語出力
Posted: 2009年5月14日(木) 15:58
by 研修生
for(int i = 0; c != '\'n; i++)でした・
Re:単語出力
Posted: 2009年5月14日(木) 16:09
by Mist
s配列を紙に書いて、自分がコンピュータになったつもりでプログラムを一行ずつ読んで配列のデータを書き換えてみることをお勧めします。
ヒントは「s = c;」です。
Re:単語出力
Posted: 2009年5月14日(木) 16:10
by non
shokika(s);
でやりたいことがわからない。
試しに、この行の代わりに、
i=0;って書いたらどうなる?(またはi=-1)
Re:単語出力
Posted: 2009年5月14日(木) 16:33
by 研修生
よくわからないけどa aと入力すると
a
aaと返ってくるからどこかおかしい・・
Re:単語出力
Posted: 2009年5月14日(木) 16:52
by Blue
#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:単語出力
Posted: 2009年5月14日(木) 16:52
by 研修生
ab cdと入力すると
最初
s[0] = 'a';
s[1] = 'b';
s[2] = '\0';
2回目
s[0] = ' ';
s[1] = ' ';
s[2] = ' ';
s[3] = 'c';
s[4] = 'd';
となってるのかな。うーむ
Re:単語出力
Posted: 2009年5月14日(木) 17:36
by non
>よくわからないけどa aと入力すると
>a
>aaと返ってくるからどこかおかしい・・
i=-1;にしたらどうだったの?
Re:単語出力
Posted: 2009年5月14日(木) 18:35
by 研修生
-1だと正しい感じになりますね。
Re:単語出力
Posted: 2009年5月14日(木) 18:40
by non
動けばいいのなら、これで終わりだけど、
結局、次の単語にするときにi=0にする必要があるということです。
で、なんでi=-1なのかというと、forが+1するからですね。
つまり、他の方が言われるように、forの使い方に問題があるわけです。
この問題なら使わない方がわかりやすいです。
Re:単語出力
Posted: 2009年5月14日(木) 20:32
by 初級者
昨日だれかが提示したソースを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;
}