以下のコードが誤っている理由を知ることができません。これは、*が入力されるか、配列のサイズに達するまで文字を受け入れ、キーボードから読み取った文字を出力する単純なコードです。読書部分は上手くいくようです。配列サイズに達する前に*を入力してもOKです。しかし、*入力せずに読み込み部分で配列サイズに達するまで待つと、問題があります。印刷中に読み取られた文字は印刷されますが、その後はいくらかのゴミが印刷されます。デバッガを使用して実行しますが、whileループはインデックスが3以上の場合は中断しません。ループが壊れていないとき
int main()
{
char myStr [3];
unsigned int index=0;
printf("Enter Single characters. Enter * to stop\n");
do
{
scanf(" %c",&myStr[index]);
index++;
} while ((myStr[index-1]!='*')&&((index)<(sizeof(myStr)/sizeof(myStr[0]))));
index=0;
while ((myStr[index]!='*')&&(index<(sizeof(myStr)/sizeof(myStr[0]))))
{
printf("%c",myStr[index]);
index++;
}
printf("\n");
return(0);
}
mystrのサイズは、[3]、おそらくそれを宣言して固定されていますか?その場合、商は配列の実際の文字数を表しません。 –
@JeremyKahan:配列上で 'sizeof(myStr)/ sizeof(myStr [0])'を実行すると、要素数を計算するのに完全に有効です。 – alk
@alkはい。しかし、ユーザーが3つを入力したかどうかにかかわらず、3つの要素があることを心配していました。しかし、ユーザーが星に入るか、3つ入力する必要があるので、今は問題ではないことがわかります。 –