能否统一一下这段代码的读取逻辑
时间: 2024-09-19 17:07:17 浏览: 58
当然可以。为了统一这段代码的读取逻辑,我们可以创建一个单独的函数负责获取用户的输入,并对输入进行有效性检查。这样可以使代码更具模块性和可维护性。下面是一个简化版的重构示例:
```c
#include <stdio.h>
#include <string.h>
typedef struct TourGroup {
char name[NAME_LENGTH];
int members;
char destination[DESTINATION_LENGTH];
} TourGroup;
// 新增的通用输入函数
TourGroup getUserInput() {
TourGroup tourGroup;
clearInputBuffer();
printf("请输入旅游团名称: \n");
fgets(tourGroup.name, NAME_LENGTH, stdin);
tourGroup.name[strcspn(tourGroup.name, "\n")] = 0;
int validMembers = -1;
do {
printf("请输入旅游团人数: ");
if (fgets(tourGroup.name, sizeof(buffer), stdin) == NULL) {
printf("读取人数失败\n");
return tourGroup;
}
validMembers = sscanf(buffer, "%d", &tourGroup.members);
} while (validMembers != 1 || tourGroup.members < 0);
printf("请输入旅游目的地: \n");
fgets(tourGroup.destination, DESTINATION_LENGTH, stdin);
tourGroup.destination[strcspn(tourGroup.destination, "\n")] = 0;
return tourGroup;
}
void addTourGroup(TourGroup tourGroups[], int max_size, int* count) {
if (*count >= max_size) {
printf("旅游团数量已达上限!\n");
return;
}
TourGroup newTourGroup = getUserInput();
if (newTourGroup.name[0] == '\0') { // 检查输入是否有效
printf("输入无效,请重新输入\n");
return;
}
tourGroups[*count] = newTourGroup;
(*count)++;
printf("旅游团信息录入成功!\n");
}
```
在这个版本中,我们首先定义了一个 `getUserInput()` 函数,该函数负责获取并验证用户输入,然后 `addTourGroup()` 函数只需要调用这个新函数,使得读取逻辑更加清晰。同时,我们在 `getUserInput()` 中增加了循环,以确保获取有效的成员人数。如果输入无效,会在函数结束前提示用户重新输入。
阅读全文