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

不使用scanf为C语言switch语句获取整数值的问题求助

解决方法

你的代码存在两处核心错误导致功能无法运行,修正后即可实现需求且避免scanf残留换行的问题:

  1. fgets()参数类型错误:你错误将int类型的choice作为参数传入fgets(),该函数第一个参数要求为char类型数组,你声明的temp数组才是正确的传入对象
  2. 类型不匹配:switch需要判断整数值,而fgets()读取到的是字符串格式的输入,需要转换为int类型后才能用于分支判断

修正后的main.c代码

#include "functions.h"
#include <stdlib.h>

int main() {
    int choice;
    char temp[10];
    
    do {
        printf("Menu\n\n");
        printf("1. Read student information from file\n");
        printf("2. Write student information to file\n");
        printf("3. Exit\n");
        // 用temp数组承接输入
        fgets(temp, 10, stdin);
        // 将字符串转为整数
        choice = atoi(temp);
    
        switch (choice) {
          case 1:
            fileRead();
            break;
          case 2:
            fileWrite();
            break;
          case 3:
            printf("Program stopped!\n");
            break;
          default:
            printf("Invalid input, please try again!\n");
            break;
        }
    } while (choice != 3);
    return 0;
}

其他优化建议

  • 你当前将fileRead、fileWrite函数的实现直接写在functions.h中不符合C语言项目规范,若有多个.c文件引用该头文件会触发函数重定义错误,建议将函数声明保留在头文件中,函数实现迁移到单独的functions.c文件
  • 现有fileRead函数逻辑不符合命名预期:你以读模式打开了student_read.txt但没有执行任何读文件操作,反而通过fgets接收用户输入,建议调整对应逻辑
  • 文件读写操作完成后需要调用fclose()关闭文件指针,避免系统资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:36:00