3 ms·
Would it not be better this way: for (i = 0; i < 1000; i++) printf ("%d %d %d\n", i / 100, (i % 100) / 10, i % 10); IMHO, such patterns (multiple nestin
by thedigitalengel 16y ago
Would it not be better this way:
for (i = 0; i < 1000; i++)
printf ("%d %d %d\n", i / 100, (i % 100) / 10, i % 10);
IMHO, such patterns (multiple nesting with empty outer loops), in most cases, are really an indication of just one real loop. Using multiple counters might also be an option.
In case the loops are doing something different, they should be indented separately. For instance, the following makes little sense:
for (i = 0; i < 10; i++) {
foo (i);
for (j = 0; j < 10; j++) {
foo (i + j);
for (k = 0; k < 10; k++) {
foo (i + j + k);
}
}
}
- RodgerTheGreat 16y agoI absolutely agree with your second example, but I think you're missing my point for nested loops. Perhaps this would be a better example: Let's say I'm making a simple tile-based game that uses a two-dimensional array called "grid" to store the map. To draw that map to the screen, I might do something like the following: for(int x = 0; x < grid.length; x++) { for(int y = 0; y < grid[0].length; y++) { drawTile(grid[x][y], x * tileWidth, y * tileHeight); } } There are other ways to refashion this as a single loop, (storing everything in a 1d array and handling the dimensioning ourselves, using an iterator and giving tiles a position attribute containing their (x,y) coordinates, etc) but is any of that really more straightforward? Again, I am not arguing for indentation anarchy, merely that there are times when it can help to bend the rules. edit: I imagine you'd prefer something like this? for(int t = 0; t < grid.length * grid[0].length; t++) { int x = t % grid.length; int y = t / grid.length; drawTile(grid[x][y], x * tileWidth, y * tileHeight); }