ショッピングモール  CDラジカセ  CDラジオ  ラジカセ  ラジオ  テープレコーダー  ポータブルMD


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


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

No.3342

演習問題6-3-1【問3】より・・・
投稿者---えこにゃん(2005/01/25 17:27:54)


演習問題6-3-1【問3】をやってみて
回答の予想すらつかなかったので解答例を見てみたのですが

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

この部分がまるで理解で出来なかったので
自分では理解できたつもりのその他の部分を
少し変形させてソースを書いてみました。

#include<stdio.h>

int main(void)
{
    char str1[128],str2[128];
    int flg=0;
        
    printf("同じ文字列を2つ入力しなさい\n");
    scanf("%s",str1);
    scanf("%s",str2);
        
    if (str1 != str2){
        flg++;
    }
    
    if(flg == 0){
        printf("等しい文字列を入力\n");
    }
    
    else{
        printf("異なる文字列を入力\n");
    }
    
    return 0;
}
このソースをコンパイルして実行し
全く同じ文字列を2つ入力した場合
flgの値は初期化の時から変わらず0のままで
    if(flg == 0){
        printf("等しい文字列を入力\n");
    }
が実行されると思ったのですが
「等しい文字列を入力」と表示されず
「異なる文字列を入力」と表示されます。

どこを読み違えているのかを教えていただきたいです。
よろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:演習問題6-3-1【問3】より・・・ 3343 monkey 2005/01/25 17:43:07


No.3343

Re:演習問題6-3-1【問3】より・・・
投稿者---monkey(2005/01/25 17:43:07)


    scanf("%s",str1);
    scanf("%s",str2);
        
    if (str1 != str2){
        flg++;
    }

"str1 != str2"
これは、文字列の関係を判定しているのではなく、ポインタの値の関係を判定しています。
文字列とは文字型のデータが並んだものであり、上の例でいえば、str1、str2は、それぞれ
のデータの並びの先頭の位置を指すポインタということになります。
str1、str2は、文字列としては同じかも知れませんが、別々に入力されたものですから、
データが格納されている場所が異なります。
つまり、それらの先頭を指すポインタの値は異なるということです。
文字列が等しいかどうかを判定するには、演習問題のように1文字ずつ取り出して比較す
るか、ライブラリ関数のstrcmpを使わなければなりません。



この投稿にコメントする

削除パスワード

No.3346

Re:演習問題6-3-1【問3】より・・・
投稿者---えこにゃん(2005/01/25 20:15:23)


monkeyさん、レスありがとうございます。

文字列についての理解が十分でないことが分かりました。
その他、説明いただいたことを全部理解するには
まだ学習していない範囲の知識も必要なようなので
ポインタの項目を勉強する時に、あらためて見直してみることにします。

>演習問題のように1文字ずつ取り出して比較する

それから、上の一文のおかげで
全く理解できていなかった部分の意味が大雑把には理解出来ました。

本当にありがとうございました。



この投稿にコメントする

削除パスワード

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




掲示板提供:Real Integrity