不使用scanf为C语言switch语句获取整数值的问题求助
解决方法
你的代码存在两处核心错误导致功能无法运行,修正后即可实现需求且避免scanf残留换行的问题:
fgets()参数类型错误:你错误将int类型的choice作为参数传入fgets(),该函数第一个参数要求为char类型数组,你声明的temp数组才是正确的传入对象- 类型不匹配:
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
相关产品推荐
相关产品推荐

