C程序代码辅助

时间:2018-05-30 03:13:17

标签: c

任何人都可以帮我解决这个问题并告诉我为什么我的程序一直告诉我值不正确吗?我的代码运行,没有错误。但是,如果我输入20的高温和10的低温,则printf语句不断出现,表示该值不正确。但它不应该是因为我说如果高于40或低低于-40或高高于低!谁能帮我?谢谢。

#define NUMS3 
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int high, low;

int main(void)
{ 
    printf("---=== IPC Temperature Analyzer ===--- \n");
    for (int i = 1; i < 4; i++) 
    {
        printf("Enter the high value for day %d:", i);
        scanf("%d", &high);

        printf("Enter the low value for day %d:", i);
        scanf("%d", &low);      
        while (high > 40 || low < -40 || high < low); 
        {
            printf("Incorrect values, temperatures must be in the range "
                   "-40 to 40, high must be greater than low.\n");
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:4)

正如评论中指出的那样,由于分号是直接的,while循环没有正文。

检查条件并始终执行printf()之后的while。因此,截至目前的while循环对highlow的值无用。但如果循环的条件是真的,它将是一个无限循环。

while似乎不合适。如果输入了无效值,您还需要提示用户重新输入正确的值。\

您可以执行类似

的操作
if (high > 40 || low < -40 || high < low) 
{
    printf("Incorrect values, temperatures must be in the range - 40 to 40, high must be greater than low.\n");
    i--;
}

取代循环和printf()

如果找到无效输入,则递减

i,以便在完成i++时循环结束时,变量值保持不变。

编辑:

当您期待数字时,用户可能会输入字符等无效输入。在这种情况下,scanf()将输入未输入保留在输入缓冲区上,如果在下一次迭代中scanf()之前未消耗该无效数据,则会出现无限循环。

scanf()返回成功分配的数量。

if( scanf("%d", &high)!=1 )
{
    printf("\nInvalid input.");
    i--;
    consumeBufferData(); //see the link
    continue;
}
if( scanf("%d", &low)!=1 )
{
    printf("\nInvalid input.");
    i--;
    consumeBufferData(); //see the link
    continue;
}

如果找到无效输入,则应使用无效数据。请参阅this帖子,了解有关如何执行此操作的讨论。

这样的东西
void consumeBufferData()
{
    int c;
    while( (c=getchar())!='\n' && c!=EOF );
}

可能就够了。