ページ 11

急ぎです。空白を含め、次々と文字を連結、.で終わらせる。

Posted: 2011年1月13日(木) 19:14
by I am You.
プログラムは、次のようにこしらえました。
#include <stdio.h>
#include <string.h>

int main(void)
{
char s_in[128], s_out[128];




printf("Keyin a word>> ");
for(scanf("%128s",s_in);len(s_in)>0;)
{

strcpy( s_out,s_in);
strcat( s_out, s_in);
}

printf("%s\n", s_out);

return 0;
}

期待している実行結果はこれです。
Keyin a word>> I
Keyin a word>> am
Keyin a word>> a
Keyin a word>> rich
Keyin a word>> man
Keyin a word>> .
I am a rich man.

わからない1点目:strcpy() で s_out[ ] を初期化するやりかたが分かりません
わからない2点目:for文のscanf("%128s", s_in);以下に書くコードが思いつかない。

こんな感じですが、どなたか教えてください。
待ってます。

Re: 急ぎです。空白を含め、次々と文字を連結、.で終わらせる。

Posted: 2011年1月13日(木) 19:27
by h2so5
>.で終わらせる。

と書かれていますが、
ドット1文字だけの入力で終わらせるのか、
それとも、ドットを含む文字列を入力したら終わらせるのかどちらでしょうか?

Re: 急ぎです。空白を含め、次々と文字を連結、.で終わらせる。

Posted: 2011年1月13日(木) 19:43
by I am You.
.1文字のみ入力したら終わらせたいです。

Re: 急ぎです。空白を含め、次々と文字を連結、.で終わらせる。

Posted: 2011年1月13日(木) 20:17
by h2so5
I am You. さんが書きました:わからない1点目:strcpy() で s_out[ ] を初期化するやりかたが分かりません
初期化の意味は分かりますか?
この場合の初期化は、s_out[ ]の中身を””にすることです。
そしてstrcpy(a,b)は、aの文字列の内容を、bと等しくする関数です。

ちなみにlen(s_in)の判定があるため、s_in[ ]も初期化は必要です。
I am You. さんが書きました:わからない2点目:for文のscanf("%128s", s_in);以下に書くコードが思いつかない。
そもそもfor文の使い方がおかしいです。

for(最初に1度だけ実行される処理;継続条件;1ループした後に実行される処理)

のように書きます。
for(scanf("%128s",s_in);len(s_in)>0;)
では、1度だけしか読み込みがされず、ずっと文字数が0以上のため無限ループします。

あと、lenという関数はありません。strlenの間違いでは?

そして、for文の中にはs_outにs_inを連結させる処理と、
ドットが入力されたらループを抜ける処理を書きます。

Re: 急ぎです。空白を含め、次々と文字を連結、.で終わらせる。

Posted: 2011年1月13日(木) 23:37
by box
>わからない1点目:strcpy() で s_out[ ] を初期化するやりかたが分かりません

s_out[]を初期化する際、strcpy()を使う必然性がありません。
質問者さんが考えている「初期化」の中身を教えてください。

# 「急ぎです」とか「至急」なんて書くのは、かえって逆効果かもしれぬ。
# そんなに切羽詰まっているんなら放っておこうか、なんて考える人がいるかも。

Re: 急ぎです。空白を含め、次々と文字を連結、.で終わらせる。

Posted: 2011年1月14日(金) 16:40
by ゆーずぃ
box さんが書きました:# 「急ぎです」とか「至急」なんて書くのは、かえって逆効果かもしれぬ。
確かにそうかもしれませんね。
昔からそういったタイトルを付ける人は解決しても感謝もせずに放置で去ってしまう人が多い気がするので、
回答する側としても「どうせ同じ類だろ~」って感じて回答するのをためらっちゃうんですよね。
まぁ、そんなことを感じるのは僕だけかもしれませんがw

とりあえず本題として、急ぎなら期日を書いてほしかったり。