开发者

Decrementing while loop in c

Is it possible to decrement the array size in a while loop in C by more than x--. For example, can you decrement an array by a third of the array size with each iteration?

int n = 10;

while (n < 0)

// do something

(round(n开发者_如何学运维/3))-- // this doesn't work, but can this idea be expressed in C?

Thank you for the help!


You can use any expression:

int n = 10;
while (n > 0)   // Note change compared with original!
{
    // Do something
    n = round(n/3.0) - 1;  // Note assignment and floating point
}

Note that you can only decrement variables, not expressions.

You could also use a for loop:

for (int n = 10; n > 0; n = round(n/3.0) - 1)
{
    // Do something
}

In this case, the sequence of values for n will be the same (n = 10, 2) whether you round using floating point or not, so you could write:

n = n / 3 - 1;

and you'd see the same results. For other upper limits, the sequence would change (n = 11, 3). Both techniques are fine, but you need to be sure you know what you want, that's all.


Yes, it is possible to add or subtract any number to your variable n.

Usually, if you want to do something a very predictable number of times, you would use a for loop; when you aren't sure how many times something will happen, but rather you are testing some sort of condition, you use a while loop.

The rarest loop is a do / while loop, which is only used when you want to execute a loop one time for certain before the first time the while check occurs.

Examples:

// do something ten times
for (i = 0; i < 10; ++i)
    do_something();

// do something as long as user holds down button
while (button_is_pressed())
    do_something();

// play a game, then find out if user wants to play again
do
{
    char answer;
    play_game();
    printf("Do you want to play again?  Answer 'y' to play again, anything else to exit. ");
    answer = getchar();
} while (answer == 'y' || answer == 'Y');


There is no array in your code. If you wan't n to have a third of its value on each iteration, you can do n /= 3;. Note that since n is integral then the integral division is applied.


Just like K-Ballo said there is no array in your example code but here is an example with an integer array.

int n = 10;
int array[10];
int result;

// Fill up the array with some values
for (i=0;i<n;i++)
    array[i] = i+n;

while(n > 0)
{
    // Do something with array

    n -= sizeof(array)/3;
}

But be careful in the example code you gave the while loop is checking if n is less than zero. As n is intialised to 10 the while loop will never be executed. I have changed it in my example.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜