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

C语言学生测验平均分计算程序输入Unknown无法终止问题求助

C语言学生测验分数计算程序故障修复方案

核心问题原因

  • 姓名输入地址越界:scanf("%s", &name[32]);写法错误,&name[32]指向长度为32的字符数组的末尾边界,输入内容会写入数组外的非法内存,导致name变量无法正确存储用户输入的姓名
  • 字符串比较逻辑错误:C语言中不能用==直接对比两个字符串的内容,==只会比较两个字符数组的首地址,永远返回假,必须用<string.h>头文件提供的strcmp函数对比字符串内容
  • 大小写匹配错误:终止判断的目标字符串是小写unknown,而预期的触发输入是首字母大写的Unknown,大小写不一致也会导致判断失败
  • 平均分计算逻辑残缺:原代码输出语句中的求和逻辑不完整,且没有做除以4的平均计算

修复后完整代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int main() {
    char name[32];
    int grade1;
    int grade2;
    int grade3;
    int grade4;
    // 调整为和预期输入一致的大小写,也可改用不区分大小写的比较函数
    char end[32] = "Unknown";

begin:
    printf("Welcome to the student Quiz Calculator Program.\n");
    printf("Enter a Student Name: ");
    // 修正输入地址,数组名name本身就是数组首地址
    scanf("%s", name);

    // 用strcmp比较字符串内容,返回0表示两个字符串完全匹配
    if (strcmp(name, end) == 0) {
        goto terminate;
    } else {
        printf("Enter quiz grade 1: ");
        scanf("%d", &grade1);
        printf("Enter quiz grade 2: ");
        scanf("%d", &grade2);
        printf("Enter quiz grade 3: ");
        scanf("%d", &grade3);
        printf("Enter quiz grade 4: ");
        scanf("%d", &grade4);
        // 补全平均分计算逻辑
        int average = (grade1 + grade2 + grade3 + grade4) / 4;
        printf("Average Quiz Calculation for %s with grades of %d, %d, %d, and %d is %d.\n", name, grade1, grade2, grade3, grade4, average);
        goto begin;
    }

terminate:
    printf("have a nice day");
    return 0;
}

可选优化

如果需要支持不区分大小写的终止触发(输入unknown、UNKNOWN都可以退出程序),可以将判断语句替换为:

if (strcasecmp(name, end) == 0)

内容的提问来源于stack exchange,提问作者Roger Bunting

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:54:00