ループはjから0(包括的に)になる必要があります。私j
変数は、通常、符号なしでタイプsize_t
です。無限ループを引き起こす符号なし整数を使用するとき、forループ条件で配列を逆方向に反復する
マイコード:
#include<stdio.h>
#include<conio.h>
#define SIZE 100
int main(){
char str[SIZE];
size_t i=0;
size_t j;
puts("Enter any string");
scanf("%s",str);
while(str[i]!='\0'){
i++;
}
for(j=i-1;j>=0;j--){
printf("%c",str[j]);
}
getch();
return 0;
}
私は無限ループを取得します。ゼロの等価性を取り除くと、文字列の逆を最初の文字なしで出力します。だからここに何が問題なの?
はい、私はjは、フォームI-1を開始すべきであることに気づいたと私は –
は私の問題を解くとありがとうありがとう固定します多くのソリューションと私は私がstrlen()を使用できることを知っている..しかし、あなたは私の理由muのコードが無限ループを引き起こしていることを説明することができます??と私はちょうどintによってsize_tを置き換えた場合、出力は正しいでしょう? size_t ??ループがj = 0になると仮定すると、要素0を出力し、その後は条件が偽になるので終了する必要があります。なぜ無限ループに入るのですか?? –
'size_t'の場合、符号なし整数は0より小さい値を持つことはできません。したがって、jが0の場合、SIZE_MAX(size_tが保持できる最大値)になります。 SIZE_MAXが4294967295で、ループがj - > 0 - > 4294967295 - > 0 - >から実行され、サイクルが進行するとします。 'int'を使うと、期待どおりに動作します。しかし、 'size_t'は文字列の長さを見つけるための正しい型です.Hence、無限ループを取得します。 'int'を使うと、期待どおりに動作します。しかし、 'size_t'は、文字列の長さを見つけるための正しい型です。 –