【问题标题】:How to let the array know if there is a non-numeric input or it reaches the end of input?如何让数组知道是否有非数字输入或到达输入末尾?
【发布时间】:2016-04-22 10:42:11
【问题描述】:

我编写了一个数组程序,它读取 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 %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;

}

【问题讨论】:

标签: c arrays average alphabet


【解决方案1】:

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);
    }
}

【讨论】:

    【解决方案2】:

    您可以使用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 number\n");
            }
        }
    }
    

    【讨论】:

    • 不清楚 - if (ptr &amp;&amp; *ptr == '\n') { 中的 ptr &amp;&amp; 的值是多少?我看不出ptr 会是NULL
    • @chux,strtol()存储*ptr中第一个无效字符的地址,如果第一个无效字符是换行符那么我们有一个有效数字,第一个有错误你是对的版本ptr必须与str比较而不是NULL(如果根本没有数字,strtol()存储原始值),谢谢!
    【解决方案3】:

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

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

    这样可以发现数组的结尾

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

    【讨论】:

      猜你喜欢
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2016-01-02
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      相关资源
      最近更新 更多