Ho un ciclo che deve passare da j a 0 (incluso). La mia variabile j
è di tipo size_t
che di solito non è firmata.iterazione di un array all'indietro in Per condizione di ciclo da arrestare a 0 quando si utilizzano numeri interi senza segno che causano un ciclo infinito
Il mio codice:
#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;
}
ottengo un ciclo infinito. Se rimuovo l'uguaglianza di zero, restituisce l'inverso della stringa senza la prima lettera. quindi qual è il problema qui?
Sì ho notato che j dovrebbe iniziare il modulo I-1 e ho fissato grazie –
Grazie il mio problema è risolto con molte soluzioni e so che posso usare strlen() .. Ma per favore puoi spiegare al mio perchè il codice mu sta causando loop infinito? e perché se io sostituisco solo size_t con int l'output sarà corretto ?? qual è il problema con size_t ?? supponiamo che il ciclo arrivi a j = 0 dovrebbe stampare l'elemento zero e dopo dovrebbe uscire perché la condizione sarà falsa, quindi perché sta entrando nel ciclo infinito ?? –
'size_t', un numero intero senza segno non può avere un valore inferiore a 0. Quindi se j - quando j era 0, allora diventerà SIZE_MAX (il valore massimo size_t può contenere). Diciamo che SIZE_MAX è 4294967295 quindi il ciclo verrebbe eseguito da j -> 0 -> 4294967295 -> 0 -> e il ciclo proseguirà. se usi 'int', funzionerà come previsto. Ma 'size_t' è il tipo giusto da usare per trovare la lunghezza della stringa. Quindi, ottieni un ciclo infinito. se usi 'int', funzionerà come previsto. Ma 'size_t' è il tipo giusto da usare per trovare la lunghezza della stringa. –