C语言 如何让数组知道是否有非数字输入或到达输入末尾



我做了一个数组程序,它可以读取 10 个数字,并找到这些数字的最小值、最大值和平均值。

现在,我希望程序在遇到非数字输入或到达输入末尾时打印出"没有足够的数字"。 例如 3 65 2 4 你好 -> "没有足够的数字"

这是我到目前为止的代码:

#include <stdio.h>
#define LENGTH 10
int main (void) {
int array [LENGTH];
int i, max, min, sum;
float average;
printf("Enter vector of 10 numbers: ");
// inputting the numbers into an array
for(i = 0; i < LENGTH; i++) {
    scanf("%d", &array [i]);
}
// Finding the minimum value
min = array [0];
for(i = 1; i < LENGTH; i++) {
    if(min > array [i]) {
        min = array [i];
    }
}
printf("Minimum vector is %dn", min);
// Finding the maximum value
max = array [0];
for(i = 1; i < LENGTH; i++) {
    if(max < array [i]) {
        max = array [i];
    }
}
printf("Maximum vector value is %dn", max);
// Finding the average of all values
sum = 0;
average = 0;
for(i = 0; i < LENGTH; i++){
    sum = sum + array [i];
    average = sum / LENGTH;
}
printf("Average vector value is %.1fn", average); // %.1f prints the number with 1 decimal point

return 0;

}

scanf返回成功解析的令牌数。

下面是有关如何检查输入是否成功的示例:

// inputting the numbers into an array
for(i = 0; i < LENGTH; i++) {
    if (1 != scanf("%d", &array [i])) {
        printf("Not enough values!n");
        exit(1);
    }
}
您可以使用

fgetsstrtol

char str[32];
char *ptr;
for (i = 0; i < LENGTH;) {
    if (fgets(str, sizeof str, stdin)) {
        array[i] = (int)strtol(str, &ptr, 10);
        if (ptr != str && *ptr == 'n') {
            i++;
        } else {
            printf("Enter a valid numbern");
        }
    }
}

这是一个简单的解决方案,在 for 循环中

  while (i!=LENGTH){
puts("There's no enough numbers");
}

这可以发现数组的末尾

要发现是否有非数值,您必须使用内置函数,例如IsDigit这是一个测试是否有数字的函数。

最新更新