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