为什么我的while循环不会在C中重复?

Ski*_*33k 0 c loops while-loop cs50

我刚进入C,我遇到了一些麻烦.我有一点时间弄清楚为什么这个while循环不会重复.我在JavaScript中创建了相同的循环,并重复输出正确的输出.http://jsfiddle.net/rFghh/

如果我使用while (cents >= 25)那么终端打印起始硬币并挂起只是闪烁.如果我使用<=25(如下所示)它会打印一次迭代.关于我做错的任何想法?

/**
 * Greedy, given a change amount, figures out the min number of coins needed
 */

#include <stdio.h>
#include <cs50.h>
#include <math.h>

int main(int argc, char const *argv[])
{
    // declare variables
    int cents = 0;
    int coins = 0;

    // ask user for amount of money, accepts a float value
    // convert input to cents and round to nearest int
    printf("O hai! ");
    do 
    {
        printf("How much change is owed? ");
        cents = round(100 * GetFloat());
    // if input is negative then ask again
    } while (cents <= 0);

    printf("Starting Cents: %d, coins are: %d\n", cents, coins);

    // Check if you can use a quarter
    while (cents <= 25);
    {
        printf("Cents before decrement: %d\n", cents);
        cents = cents - 25;
        printf("Cents after decrement: %d\n", cents);
        coins = coins + 1;
    }

    printf("FINAL Cents: %d, coins are: %d\n", cents, coins);

    return 0;
}



jharvard@appliance (~/cs50/Week_1/pset1): make greedy && ./greedy
clang -ggdb3 -O0 -std=c99 -Wall -Werror    greedy.c  -lcs50 -lm -o greedy
O hai! How much change is owed? 1.25
Starting Cents: 125, coins are: 0
Cents before decrement: 125
Cents after decrement: 100
FINAL Cents: 100, coins are: 1
jharvard@appliance (~/cs50/Week_1/pset1): 
Run Code Online (Sandbox Code Playgroud)

K-b*_*llo 8

代码没有按照您的想法执行.这一行:

while (cents <= 25);
{ ::: }
Run Code Online (Sandbox Code Playgroud)

相当于:

while (cents <= 25)
{
    ;
}
{ ::: }
Run Code Online (Sandbox Code Playgroud)

因此,它会迭代永远执行永不改变的空语句cents.通过删除分号并重新评估逻辑来修复它.

  • 此外,OP的代码中的逻辑仍有缺陷.他基本上写道"虽然美分小于25,但减少它".没有任何意义. (2认同)

Roh*_*ain 7

你在while声明的最后有一个分号: -

while (cents <= 25);  <-- Here's the semi-colon. Remove it.
Run Code Online (Sandbox Code Playgroud)