• ベストアンサー

副プログラム内(void mystery(char s1[],char s2[]))の動作確認文 

お忙しい中失礼します。 下記のプログラム内の動作について質問があります。宜しければご回答願います。 void mystery(char s1[],char s2[]) { int i=0; while(s2[i]!='\0'){ //s2[i]内に文字が入力され、エンターキーが入力されるまで{s1[i] = s2[i]; ++i;}内の動作を行う。 s1[i] = s2[i];    //s1[i] を基準にs2[i]の文字数を++iを使い、カウントする。 ++i;         //++iはただs1[i] とs2[i]の文字が合致してるか確認を行う。s1[]=”Good”なら s2[]=”Good”の各文字が合致してるかどうか。 } s1[i] = '\0';    //s1[i]にエンターキーが入力されて、void mystery(char s1[],char s2[])内のループを抜ける。 return;       //s1[i] = '\0'で'\0'が定義されているのでreturn 0;でない? } ↑上記動作質問://より右側の文章は文章的に正しいでしょうか? void mystery(char s1[],char s2[])内でどんな動作をしてるのかが、イマイチよく分からないのです。 ↓下記のプログラム #include <stdio.h> #include <stdlib.h> void mystery(char [], char[]); int main() { char m1[81],m2[81]; int i; printf("Message?"); gets(m1); mystery(m2,m1); puts(m2); system("PAUSE"); return 0; } void mystery(char s1[],char s2[]) { int i=0; while(s2[i]!='\0'){ s1[i] = s2[i]; ++i; } s1[i] = '\0'; return; }

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

  • ベストアンサー
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.2

うーん。。。 動作の説明としては全て間違いです。 >while(s2[i]!='\0'){ s2のi番目の要素が終端文字で無い間繰り返し処理します。 #エンターキー云々は関係ありません。 >s1[i] = s2[i]; s1のi番目の要素にs2のi番目の要素をコピーしています。 #比較ではなく代入です。 >++i; ここでのiは文字列の要素を表す要素番号に過ぎません。 #次の文字へ進むだけで、カウントなどしていません。 >s1[i] = '\0'; s2が文字列の終わりを検出したので、 ループを抜けてs1にも文字の終端を書き込んでいます。 #ここでは既にループを抜けた後です。 >return;  関数の戻り値はvoidつまり「無し」なので returnで評価される式も在りません。 #疑問系でコメントを書くなら書かない方が良いです。 #混乱のもとですから。。。 短くすると・・・:-p void mystery(char *s1, const char *s2){   while (*s1++ = *s2++); }

jpncndgoo2
質問者

お礼

丁寧な回答有難うございました。 #疑問系でコメントを書くなら書かない方が良いです。 #混乱のもとですから。。。→ハイ・・・ かなり助かりました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「文章的に正しいか」といわれると, 「日本語の文章としては (構文上) 間違っていないけど, 実際の動作の説明にはまったくなっていない」ということになるかなぁ. だいたい, 「エンターキー」って何? あっさり答えだけ書いちゃうと「s2 から s1 に『文字列』をコピーする」です. どうしてそうなるかは, がんばって資料を探してください.

jpncndgoo2
質問者

補足

回答有難うございます。 エンターキー→enterキー です。 「s2 から s1 に『文字列』をコピーする」→それはなんとなく分かるのですが・・・。 出来ましたら、「実際の動作の説明」を教えていただけないでしょうか? お願いします・・・。

関連するQ&A