Mam pętlę, która musi przejść od j do 0 (włącznie). Moja zmienna j
jest typu size_t
, która jest zwykle niepodpisana.iterowanie tablicy w tył w Warunek pętli For zatrzymany na 0 przy użyciu liczb całkowitych bez znaku powodującego nieskończoną pętlę
Mój kod:
#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;
}
uzyskać nieskończoną pętlę. Jeśli usunę równość zerową, wyprowadza on odwrotność łańcucha bez pierwszej litery. więc jaki jest problem?
Tak zauważyłem, że j powinna rozpocząć formularz I-1 i naprawiłem dziękuję –
Dziękuję mój problem jest rozwiązany wiele rozwiązań i wiem, że mogę używać strlen() .. Ale proszę, możesz wyjaśnić, dlaczego kod mu powoduje nieskończoną pętlę ?? i dlaczego jeśli po prostu zastąpię size_t przez int wynik będzie poprawny? Jaki jest problem z size_t? Przypuśćmy, że pętla dochodzi do j = 0, powinna wydrukować element zero, a potem powinno wyjść, ponieważ warunek będzie fałszywy, więc dlaczego wchodzi w nieskończoną pętlę ?? –
'size_t', liczba całkowita bez znaku nie może mieć wartości mniejszej niż 0. Tak więc, jeśli zrobisz j-- gdy j ma wartość 0, to stanie się SIZE_MAX (maksymalna wartość size_t może pomieścić). Powiedzmy, że SIZE_MAX to 4294967295, wtedy pętla uruchomi się z j -> 0 -> 4294967295 -> 0 ->, a cykl się powiedzie. jeśli użyjesz 'int', to będzie działać zgodnie z oczekiwaniami. Ale 'size_t' jest właściwym typem, którego używa się do znalezienia długości łańcucha. Stąd otrzymujesz nieskończoną pętlę. jeśli użyjesz 'int', to będzie działać zgodnie z oczekiwaniami. Ale "size_t" jest właściwym typem, którego używa się do znalezienia długości ciągu znaków. –