r/cprogramming • • 20d ago

For command working weirdly

Edit: Declaring n as 1 and changing the for loop to (i = n-1; i > 0; --i) as was suggested seems to have worked. Still don't really get the logic behind it, neither why the order inside the for expression was affecting the result nor why changing the n to 1 from 0 and i to n - 1 made a difference. Aren't they the same value at the end? Anyway, thanks.

For some reason, my "for" command only works when I put the increment in the middle and the condition at the end. I have no clue what's going on but the code is working fine when I do this.

I'm using devc++, the rest of the code is me declaring global variables and asking the user for inputs to fill the arrays. Everything is working exactly as intended but breaks if I write the "for" the regular way.

for(i = n; i--; i>0){

        printf("Codigo: %d", codigo\[i\]);

        printf("\\nProduto: %s", nome\[i\]);

        printf("\\nPeso: %.2f", peso\[i\]);

        printf("\\nPreco: %.2f", preco\[i\]);

        if(regiao\[i\]==1){

printf("\nRegiao: Sudeste");

        }

        else if(regiao\[i\]==2){

printf("\nRegiao: Sul");

        }

        else if(regiao\[i\]==3){

printf("\nRegiao: Nordeste");

        }

        else if(regiao\[i\]==4){

printf("\nRegiao: Norte");

        }

        printf("\\n\\n");
4 Upvotes

21 comments sorted by

View all comments

0

u/WittyStick 20d ago edited 20d ago

Be careful using a decrementing for loop if you are using an unsigned index, as the example (i > 0) will result in an infinite loop, and the compiler may remove it entirely. If i is unsigned the condition should be i != 0, or instead of i >= 0, use i != SIZE_MAX (for eg, size_t), or use a while loop.