分配的任务是要求输入#个值,然后最后输出最小值,最大值和平均值,这时我已经用尽了所有的错误修复程序

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main()
{
    int ErrorDetection = 1;
    char valCounter;
    int valnumber;
    int Incrementer;
    int StoredValue;
    int MinimumValue = 100;
    int MaximumValue = 0;
    float Average;
    int AddToStored;
    int Sum = 0;

    printf("MIN, MAX, and MEAN CALCULATOR\n\n");

    while (ErrorDetection != 0)
    {
        printf("How many values are to be entered?\n");
        scanf("%s", &valCounter);

        if (valCounter > '0' && valCounter < '9') {
            ErrorDetection = 0;
        }
        else {
            ErrorDetection = 1;
            printf("INPUT ERROR!\n");
        }
        valCounter = valCounter - 47;
    }

    for (Incrementer = 1; Incrementer < valCounter; Incrementer++)
    {
        ErrorDetection = 1;

        while (ErrorDetection != 0) {
            printf("Value %d: ", Incrementer);
            scanf(" %d", &StoredValue);

            if (StoredValue > 0 && StoredValue < 9) {
                ErrorDetection = 0;
            }
            else {
                ErrorDetection = 1;
                printf("INPUT ERROR!\n");
                continue;
            }
        }

        if (StoredValue > MaximumValue) {
            MaximumValue = StoredValue;
        }
        if (StoredValue <= MinimumValue) {
            MinimumValue = StoredValue;
        }
        Sum = Sum + StoredValue;
    }

    valCounter = valCounter - 1;
    Average = (float)Sum / (float)valCounter;

    printf(
        "Minimum value is %d, maximum value is %d, and average value is %g.\n",
        MinimumValue, MaximumValue, Average
    );
}


如果输入两位数的数字,事情就会开始崩溃,但是同时我不知道如何允许错误的进行错误检查,因为我使用ASCII转换来检查输入是否为数字或不。

最佳答案

您在这里有未定义的行为。

     char valCounter;

    scanf("%s", &valCounter);


您已将valCounter声明为char类型,但尝试读取string类型。

因此,将scanf更改为。

scanf("%c", &valCounter);




我建议您将valCounter声明为int

int valCounter;
scanf("%d", &valCounter);


在这种情况下,您的if将成为。

if ((valCounter > 0) && (valCounter < 9))


而且你不需要

valCounter = valCounter - 47; //remove


同样,您的for循环应从0开始而不是1

for(Incrementer = 1 ; Incrementer < valCounter; Incrementer++)


应该

for(Incrementer = 0 ; Incrementer < valCounter; Incrementer++)

关于c - 如果输入了非整数,程序将无限循环,并且不接受多位数字输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52651348/

10-11 22:11
查看更多