2015-09-06 59 views
1

我的代码旨在显示一个人需要一定金额的硬币的最少数量。我将这个值转换成分,然后用循环来测试每一个不同的硬币。您可能会看到printf中用于测试目的的变量,以查看它出错的位置。这些循环会一直持续下去,不会像循环重复一样多次减去C的值。恩。 c-25保持在475美分,而不是每次循环重复25次(价值$ 5.00)。为什么我的程序中的循环没有终止?

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

int main(void) 
{ 
float c=0; 
int i=0; 
int y=0; 

    printf("How much change do you owe?\n"); 
    c=GetFloat(); 
    c=c*100; 
    printf("%f\n", c); 
    do 
    { 
     c-25; 
     printf("%d\n", c-25); 
     if (c>25) 
     { 
      i++; 
      printf("%d\n", i); 
     } 
    } 
     while (c>=25); 
    printf("%d\n", i); 

    do 
    { 
     y=c-10; 
     if (y>0) 
     { 
      i++; 
     } 
    } 
     while (y>10); 
    if (y<=10) 
    { 
     printf("%d\n", i); 
    } 
    do 
    { 
     y=c-5; 
     if (y>0) 
     { 
      i++; 
     } 
    } 
     while (y>5); 
    if (y<=5) 
    { 
     printf("%d\n", i); 
    } 
    do 
    { 
     y=c-1; 
     if (y>0) 
     { 
      i++; 
     } 
    } 
     while (y>1); 
    if (y==0) 
    { 
     printf("%d\n", i); 
    } 
} 

注:这是 “时代变革” 方案,CS50

+0

**如果您需要确切值,请勿使用'float'!** – Olaf

回答

4

c是从来没有改变过。

有该声明没有影响:

c-25; 

这或许应该是:

c = c - 25; 

c -= 25; 
1

这里是你的代码中的一些言论:

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

int main(void){ 
// use self-explanatory and meaningful names of your variables 
float c = 0; 
int i = 0; 
int y = 0; 

// input 
printf("How much change do you owe?\n"); 
c = GetFloat(); 
c = c * 100; 
// print input 
printf("%f\n", c); 

// add comment explaining the purpose of this loop 
do{ 
    c = c - 25; // corrected to decrement by 25 

    printf("%d\n", c); 
    if (c > 25){ 
     i++; 
     printf("%d\n", i); 
    } 
}while(c >= 25); 

printf("%d\n", i); 

// add comment explaining the purpose of this loop 
do{ 
    y = c - 10; 
    if (y > 0){ 
     i++; 
    } 
}while(y > 10); 

// add comment explaining the purpose of this condition statement 
if (y <= 10){ 
    printf("%d\n", i); 
} 

// add comment explaining the purpose of this loop 
do{ 
    y = c-5; 
    if (y > 0){ 
     i++; 
    } 
}while(y > 5); 

// add comment explaining the purpose of this condition statement 
if (y <= 5){ 
    printf("%d\n", i); 
} 

// add comment explaining the purpose of this condition statement 
do{ 
    y = c-1; 
    if (y > 0){ 
     i++; 
    } 
}while(y > 1); 
// add comment explaining the purpose of this condition statement 
if(y == 0){ 
    printf("%d\n", i); 
} 
} 

主要问题来自终止条件计数器变量增量/减量,这是错误或丢失,并导致无限循环。

相关问题