Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
C 如何让数组知道是否存在非数字输入或是否到达输入的末尾?_C_Arrays_Average_Alphabet - Fatal编程技术网

C 如何让数组知道是否存在非数字输入或是否到达输入的末尾?

C 如何让数组知道是否存在非数字输入或是否到达输入的末尾?,c,arrays,average,alphabet,C,Arrays,Average,Alphabet,我制作了一个数组程序,可以读取10个数字,并找到这些数字的最小值、最大值和平均值 现在,我希望程序在遇到非数字输入或到达输入末尾时打印出“没有足够的数字”。e、 g.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 v

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

现在,我希望程序在遇到非数字输入或到达输入末尾时打印出“没有足够的数字”。e、 g.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 %d\n", 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 %d\n", 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 %.1f\n", average); // %.1f prints the number with 1 decimal point


return 0;
#包括
#定义长度10
内部主(空){
整数数组[长度];
int i,max,min,sum;
浮动平均;
printf(“输入10个数字的向量:”);
//将数字输入到数组中
对于(i=0;i数组[i]){
min=数组[i];
}
}
printf(“最小向量为%d\n”,最小值);
//求最大值
max=数组[0];
对于(i=1;i

}

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);
    }
}
//将数字输入数组
对于(i=0;i
您可以使用
fgets
strtol

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 number\n");
        }
    }
}
charstr[32];
char*ptr;
对于(i=0;i
这是一个简单的解决方案,在for循环中

  while (i!=LENGTH){

puts("There's no enough numbers");

}
这可以发现阵列的结尾


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

可能会派上用场。检查函数返回的内容。不清楚-如果(ptr&&*ptr='\n'){
,则
ptr&&
中的
ptr&&
的值是多少?我不知道
ptr
将如何
NULL
@chux,
strtol()
*ptr
中存储第一个无效字符的地址,如果第一个无效字符是换行符,那么我们有一个有效的数字,在第一个版本中有一个错误您是对的
ptr
必须与
str
进行比较,而不是与
NULL
进行比较(如果根本没有数字,
strtol()
存储原始值),谢谢!