分配的任务是要求输入#个值,然后最后输出最小值,最大值和平均值,这时我已经用尽了所有的错误修复程序
#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开始而不是1for(Incrementer = 1 ; Incrementer < valCounter; Incrementer++)
应该
for(Incrementer = 0 ; Incrementer < valCounter; Incrementer++)
关于c - 如果输入了非整数,程序将无限循环,并且不接受多位数字输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52651348/