Cs50贪婪而不使用<cs50.h>

时间:2017-06-20 10:04:52

标签: c cs50

我在不使用cs50头文件的情况下解决了cs50课程的贪婪算法。我写了一段代码。它可以正常使用数字作为输入但是当我给它一个字符串或字母作为输入它不会提示我回来。我不知道如何解决这个问题。

#include <stdio.h>

int main()
{
float c;
int C, nQ, rem1, nD, rem2, nN, rem3;

do
{
    printf("O hai! How much change is owed? ");
    scanf("%f", &c);
}
while(c<0);

C = c * 100;

nQ = C / 25;
rem1 = C % 25;

nD = rem1 / 10;
rem2 = rem1 % 10;

nN = rem2 / 5;
rem3 = rem2 % 5;

printf("%d\n", nQ+nD+nN+rem3);
}

1 个答案:

答案 0 :(得分:0)

输入的序列不是浮点数后,您期望c为负数。

这不是一个有效的假设。如果scanf失败,则变量read的值未定义。

您需要检查scanf的返回值,以了解读取是否确实成功。因此,您可以将代码更改为。

int read;
do
{
    printf("O hai! How much change is owed? ");
    read = scanf("%f", &c);

    if (read == EOF){
        // Appropriate error message.
        return -1;
    }
    if (read != 1)
        scanf("%*s");
}
while(read != 1 || c < 0);

现在,如果scanf没有读取浮点数,它将返回0并且您可以继续提示。

演示here