我正在解决不使用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);
}

最佳答案

输入一个非浮点数的序列后,您期望c为负数。

这不是一个有效的假设。如果scanf失败,则读取的变量的值不确定。

您需要检查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

关于c - CS50贪婪而不使用<cs50.h>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44649986/

10-10 13:14