Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cs50贪婪而不使用<;cs50.h>;_C_Cs50 - Fatal编程技术网

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

Cs50贪婪而不使用<;cs50.h>;,c,cs50,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? ");

我正在解决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);
}
#包括
int main()
{
浮点数c;
INTC、nQ、rem1、nD、rem2、nN、rem3;
做
{
printf(“哎呀!欠了多少零钱?”);
scanf(“%f”、&c);
}

而(c在输入非浮点数的序列后,您希望
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);
int读取;
做
{
printf(“哎呀!欠了多少零钱?”);
read=scanf(“%f”、&c);
如果(读==EOF){
//相应的错误消息。
返回-1;
}
如果(读取!=1)
scanf(“%*s”);
}
while(read!=1 | | c<0);
现在,如果scanf没有读取浮点值,它将返回0,您可以继续提示


演示

为什么在同一个函数中使用名为
C
C
的变量?您需要检查
scanf(“%f”,&C)的返回值;
以了解是否读取了1个数字。我使用了两个变量将浮点转换为整数。我检查了值。输入数字时效果很好。但即使输入字母,我也希望得到提示。
c=-1;if(scanf(“%f”,&c)!=1)while(getchar()!=“\n”
对于什么输入,您希望得到什么输出?给我们一个例子。我错过了需要丢弃字符串以防浮点未被读取的部分。编辑并添加了。@AjayBrahmakshatriya您的演示代码可以工作。谢谢。@BLUEPIXY我认为这是必需的行为-如果输入为负,OP希望重新提示。我现在检查了它。code工作正常。即使我也有同样的问题。但现在它只提示一次。@BLUEPIXY将操作数的顺序更改为
|