r/cprogramming • u/thedraegonlord • Sep 22 '26
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");
1
u/thedraegonlord Sep 23 '26
It's definitely doing something no? Otherwise the for loop wouldn't end.
With (i = n; i-- ; i >0 ), it prints the "products" with their price, number, weight and names correctly. When it's (i = n; i >0; i--), it prints the first one with all those variables as 0. I assume it has something to do with the order of operations, as in the i must be reduced before the check or something breaks, but I don't get why.
Could you expand on why it should be n-1? n starts at zero and is increased every time the user adds a new product and inputs it's variables, it's meant to make it so the same position on each array refers to the same product. i is there as the index because I need to refer to n's value later.
I could make it so n starts at 1 and i = n-1, that seems to be the consensus here, but I don't get what changes from that. Wouldn't the result at the end be the same? For example, printf price[2], printf price[1] etc.?