お忙しい中失礼します。
下記のプログラム内の動作について質問があります。宜しければご回答願います。
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;
}
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++);
}
丁寧な回答有難うございました。
#疑問系でコメントを書くなら書かない方が良いです。
#混乱のもとですから。。。→ハイ・・・
かなり助かりました。
No.1
- 回答日時:
「文章的に正しいか」といわれると, 「日本語の文章としては (構文上) 間違っていないけど, 実際の動作の説明にはまったくなっていない」ということになるかなぁ. だいたい, 「エンターキー」って何?
あっさり答えだけ書いちゃうと「s2 から s1 に『文字列』をコピーする」です. どうしてそうなるかは, がんばって資料を探してください.
この回答への補足
回答有難うございます。
エンターキー→enterキー です。
「s2 から s1 に『文字列』をコピーする」→それはなんとなく分かるのですが・・・。
出来ましたら、「実際の動作の説明」を教えていただけないでしょうか?
お願いします・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- Visual Basic(VBA) 該当セルに行替えを含むデータを命令文に入れて、2行に表示したい。 5 2023/07/20 11:51
- 工学 電気回路の2端子対回路 (1)スイッチS1のみが開いているときの電流I1を求めよ。 (2)スイッチS 4 2023/05/29 16:40
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- 数学 数学の質問です。 kを正の実数とする。 点Pは△ABCの内部にあり、 kAP+5BP+3CP = 0 2 2023/07/03 21:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ネットワークにつながっている...
-
型変換
-
下記のプログラムがコンパイラ...
-
バイナリファイルをコピーする...
-
間接操作のレベルとは
-
ファイル名である文字列からbas...
-
全角文字を含んだ文字の並びを...
-
charからLPTSTRへの変換方法
-
100バイトのバイナリファイルを...
-
【至急】C言語の問題です、どな...
-
int main()の・・・
-
main の引数には const 付けた方が
-
strncpyと_tcsncpy_sのヌルの扱...
-
c言語の問題の説明、各所ごとに
-
【C言語】文字型と整数型の違い
-
ひとつのプログラムにしたいの...
-
ftoa の作り方
-
double型の値をchar配列に変換...
-
phpMyAdminからストアドプロシ...
-
至急!C言語文字列置換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【至急】C言語の問題です、どな...
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
fgetsなどのときのstdinのバッ...
-
絶対パスからのファイル名の切...
-
文字列から空白を取り除きたい...
-
C言語のfor文です。 繰り返しの...
-
テキストデータをそのままバイ...
-
CStringをwchar_tに変換したい
-
switch文で文字を比較すること...
-
C言語の入力した文字を反転させ...
-
atoi( ) の反対をやりたい
-
double型の値をchar配列に変換...
-
C言語 ミリ秒を日付に変換には
-
'const char *' 型は 'char *' ...
-
文字列がNULLか空文字列かの判定
-
c++ 文字列を入力して、一文字...
-
型変換
-
干支のプログラム
おすすめ情報