员工管理系统中员工ID纯数字校验及重复输入实现咨询
解决方案
要实现员工ID的数字校验并在不通过时重新输入,你需要调整校验函数的返回值,并在输入函数中加入循环逻辑,具体修改如下:
1. 优化校验函数checkValidId
将原void类型改为返回int,用1表示ID有效(全数字),0表示无效。同时优化校验逻辑,遇到非数字字符直接返回,无需遍历整个字符串:
int checkValidId(char *id) { for(int i = 0; id[i] != '\0'; i++) { // 检查当前字符是否不是数字 if(!(id[i] >= '0' && id[i] <= '9')) { return 0; // 无效ID,返回0 } } // 所有字符都是数字,返回1 return 1; }
2. 修改input函数添加循环逻辑
使用do-while循环,反复获取员工ID直到校验通过:
struct employee input() { struct employee e; do { printf("Enter Employee ID: "); // 注意:e.empId本身就是数组名,不需要取地址& scanf("%s", e.empId); // 校验不通过时提示用户 if(!checkValidId(e.empId)) { printf("Invalid Employee ID! Please enter only digits.\n"); } } while(!checkValidId(e.empId)); // 校验不通过则循环 // 后续输入逻辑... return e; }
额外注意事项
- 原代码中
scanf("%s", &e.empId);存在错误:e.empId是字符数组名,本身就是指向数组首元素的指针,不需要加&,去掉后才是正确写法。 - 如果员工ID长度有要求(比如最多9位,因为
empId[10]最后一位要存结束符\0),可以在校验函数中加入长度检查,比如:if(strlen(id) > 9) { printf("Employee ID cannot exceed 9 digits!\n"); return 0; }
内容的提问来源于stack exchange,提问作者DHEERAJ SWAROOP S M
相关产品推荐
相关产品推荐

