0

実行時エラーを見つけようとして途方に暮れています。私は struct データ型を持っており、それを array に実装していitems[]ます。構造体には、char name定義済みがあります。また、cin を使用してユーザー入力をcharデータ型に読み込んでいます。

i=0;
do {
printf("%c\n", items[i].name);
printf("%c\n", itemname);

//if ( items[i].name == itemname ) 
//found=true;
i++;
} while (i<numofitems || found);

if ステートメントのコメントを外すと、printf("%c\n", itemname);が何千回も実行され、その後にBus error: 10. numofitems は現在わずか 5 であることに注意してください。

現在書かれている方法からの出力:

A
C
B
C
C
C
D
C
E
C

ある文字が別の文字と同等である場合、単純に比較できない理由はありますか?

4

4 に答える 4

1

「found=true」を設定すると、ループが永久に実行されます。ループテストを変更して、見つかったときに終了するようにします。

} while (i < numofitems && found == false );

または、見つかった設定の後に break ステートメントを配置します。

if ( items[i].name == itemname ) {
    found = true;
    break;
}
于 2013-04-05T01:02:11.767 に答える
0

うん。また、10 文字が出力されることに注意してください。各ループ反復は 2 回出力されるため、i が numofitems を超えるまで、ループは正常に実行されます。その時点で 'found == true' であるため、ループは 6 回目の反復を試み、バス エラー (より一般的にはセグメンテーション フォールトとして知られる)を引き起こします。

于 2013-04-05T01:02:05.173 に答える