You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言使用scanf向数组录入元素时最后一个输入值不生效如何解决

问题原因

你的程序存在两个核心错误,对应你观察到的异常表现:

  1. 打印格式控制符不匹配
    你定义的ReqMean是double类型,但printf输出时使用了仅适用于int类型的%d格式符,这属于C语言的未定义行为,你看到的输出值0并不是变量实际存储的数值,是格式符使用错误导致的输出异常。如果要打印double类型的数值,请改用%lf或者%f格式符。
  2. 业务逻辑不符合预期
    按照你当前的代码逻辑,输入的所有数值里,最后一个会被单独取出赋值给ReqMean,不会被算作成绩存入数组的有效成绩范围内:
  • 你输入10、32、20三个数值时,numgrade会被累加为3,随后ReqMean = grades[numgrade -1]也就是把grades[2]里的20赋值给了ReqMean,这个值本身不会被统计到有效成绩里。如果你预期输入的三个值都是成绩,那你不应该从成绩数组末尾取值作为ReqMean,应该单独增加一行scanf读取期望均值。

修复后的参考代码

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

#define N 50
#define MaximalSTD 10

int main() {
    printf("Please enter the grades of the examinees");
    printf(" followed by the expected mean\n");
    double grades[N], ReqMean; 
    int numgrade = 0;
    for (int i = 0; i < N; i++) {
        if (scanf("%lf", &grades[i]) == 1) {
            numgrade++;
        } else
            break;
    }
    ReqMean = grades[numgrade - 1];
    // 替换适配double类型的格式符
    printf("numgrade: %d\nReqMean: %lf\n", numgrade, ReqMean);
    // 可新增打印验证grades[2]的实际存储值
    printf("grades[2]实际存储值:%lf\n", grades[2]);
    return 0;
}

内容的提问来源于stack exchange,提问作者Arie Creson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:06:00