У меня есть цикл, который должен идти от j до 0 (включительно). Моя переменная j
имеет тип size_t
, который обычно является неподписанным.Итерирование массива назад в Условие цикла для остановки при 0 при использовании целых чисел без знака, вызывающих бесконечный цикл
Мой код:
#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-код вызывает бесконечный цикл? и почему, если я просто заменю size_t на int, результат будет правильным? В чем проблема с size_t ?? Предположим, что цикл приходит к j = 0, он должен печатать нулевой элемент и после этого должен быть завершен, так как условие будет ложным, поэтому почему он вводит бесконечный цикл? –
'size_t', целое число без знака не может иметь значение меньше 0. Так что если вы делаете j--, когда j равно 0, тогда он станет SIZE_MAX (максимальное значение size_t может удерживаться). Предположим, что SIZE_MAX - это 4294967295, тогда цикл будет работать от j -> 0 -> 4294967295 -> 0 ->, и цикл продолжится. если вы используете 'int', он будет работать так, как вы ожидали. Но 'size_t' - это правильный тип, который можно использовать для определения длины строки. У вас есть бесконечный цикл. если вы используете 'int', он будет работать так, как вы ожидали. Но 'size_t' - это правильный тип, который можно использовать для поиска длины строки. –