掲示板ランキング  プラスター(プラスター)  プラスター(フェルビナク配合)  塗り薬(ゲル)


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.7373

演習 6-3-1 問3について
投稿者---みみず(2007/04/21 20:54:53)


こんにちは、みみずと申します。
どうしてもわからないことがあるので質問させてください。

演習 6-3-1 問3の解答例で、

char str1[128], str2[128];
int flg = 0;
int i = 0;

printf( "同じ長さの文字列を2つ入力しなさい\n" );
scanf( "%s", str1 );
scanf( "%s", str2 );

while ( str1[i] != '\0' ) {
if ( str1[i] != str2[i] ) {
flg++;
}

と、ここままではわかるのですが、この下の

i++; 

これが何を意図しているのかがわかりません。なぜここでiを足すのでしょうか。


またこのとき、
if ( str1[i] != str2[i] ) {
flg++;
}
i++;
}
の箇所を、
if ( str1[i] != str2[i] ) {
flg++;
}
else{
i++;
}
とするとエラーになってしまいます。これはelse文を省略しているだけなのではないのでしょうか?
どうぞ宜しくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:演習 6-3-1 問3について 7374 kolona 2007/04/21 22:00:53


No.7374

Re:演習 6-3-1 問3について
投稿者---kolona(2007/04/21 22:00:53)



>と、ここままではわかるのですが、この下の
>
> i++; 
>
>これが何を意図しているのかがわかりません。なぜここでiを足すのでしょうか。

配列の添字を一個ずつ増やしているだけです。




>またこのとき、
>if ( str1[i] != str2[i] ) {
> flg++;
> }
> i++;
> }
>の箇所を、
>if ( str1[i] != str2[i] ) {
> flg++;
> }
> else{
> i++;
> }
>とするとエラーになってしまいます。これはelse文を省略しているだけなのではないのでしょうか?

それはelseの省略ではありません。elseはifの内容が実行されなかったとき(ifの条件が真でないとき)に実行される部分です。i++;はどんなときでも実行されなければならない処理です。なのでelseに入れるのは間違いです。

が、それ以前にelseの{}の対応が多分できてません。
else{}
のように条件文の処理をくくる{と}は必ず対応させましょう。
あなたはwhile(){}の}をelseの{と混同しているのではないですか?




この投稿にコメントする

削除パスワード

No.7375

Re:演習 6-3-1 問3について
投稿者---みみず(2007/04/21 23:39:56)


お返事ありがとうございます。
大変勉強になります。
もしよろしければ、あと少しだけお付き合いください。

>配列の添字を一個ずつ増やしているだけです。

flg++;
までは、条件文に合わなければ「flg」を「1」にして「if」と連動させていることがわかるのですが、iの配列添字を一個ずつ増やすのが何故なのかがわからないのです。消せばプログラムが反応しなくなるので必須文だとわかるのですが、[i]の中の数字が増えるだけですよね? 
一体これをすることによってプログラム的には何の効果があるのでしょうか。

>それはelseの省略ではありません。elseはifの内容が実行されなかったとき(ifの条件が真でないとき)に実行される部分です。i++;はどんなときでも実行されなければならない処理です。なのでelseに入れるのは間違いです。

そうだったのですか! ありがとうございます。まだまだ勉強不足です…。
{ }の件は、そのコピーしたのでああなってしまいました。ややこしいことをして申し訳ありませんでした。


この投稿にコメントする

削除パスワード

No.7376

Re:演習 6-3-1 問3について
投稿者---kolona(2007/04/22 00:02:11)



>までは、条件文に合わなければ「flg」を「1」にして「if」と連動させていることがわかるのですが、iの配列添字を一個ずつ増やすのが何故なのかがわからないのです。消せばプログラムが反応しなくなるので必須文だとわかるのですが、[i]の中の数字が増えるだけですよね? 
>一体これをすることによってプログラム的には何の効果があるのでしょうか。

全ての要素(文字)を調べるためです。Cでは文字列の違いを一文字ずつ比較しないといけません。

添字の意味が分からないなら
http://www9.plala.or.jp/sgwr-t/c/sec02.html#s2-3
基本文法から勉強してください


この投稿にコメントする

削除パスワード

No.7377

Re:演習 6-3-1 問3について
投稿者---bugs(2007/04/22 00:02:30)


2つの文字列の内容を、先頭文字から「1文字ずつ順番に」
比較しています。

「順番に」比較するということは、まず先頭文字どうしを比較して、
次の文字どうし、さらに次の文字どうし、...という風に
比較していきます。

「1文字ずつ順番に」の「1文字ずつ」が
添字[i]に相当し、「順番に」がi++に相当します。


この投稿にコメントする

削除パスワード

No.7378

Re:演習 6-3-1 問3について
投稿者---みみず(2007/04/22 00:11:06)


kolonaさん、bugsさん
お返事ありがとうございました。
なるほど、1文字を順番に比較させるためにi++とさせていたのですか。ようやく謎がとけました。本当に感謝です。

それに、配列についての理解がおぼつかなかったようです。わかっているつもりで先に進んでも混乱してしまいますね。もう一度ページを戻って学ぼうと思います。
ありがとうございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ