void getFiveNum(int a[], FILE *fp) { int ch; for (int i = 1; i <= 5; i++) { ch = fgetc(fp); a[i] = 0; while (ch != 10) { a[i] = a[i] * 10 + (ch - '0'); ch = fgetc(fp); } } }还能怎么写
时间: 2024-01-18 14:03:09 浏览: 57
除了对代码进行一些优化之外,还可以考虑使用fgets函数来读取整行数据,然后使用sscanf函数从字符串中读取整数。这样可以避免在循环中反复调用fgetc函数,提高读取效率。
下面是一个使用fgets和sscanf的示例代码:
```c
void getFiveNum(int a[], FILE* fp) {
char line[20];
for (int i = 0; i < 5; i++) {
if (fgets(line, sizeof(line), fp) == NULL) {
printf("Failed to read line %d from file.\n", i+1);
break;
}
if (sscanf(line, "%d", &a[i]) != 1) {
printf("Failed to read integer %d from line %d.\n", i+1, i+1);
break;
}
}
}
```
这个函数首先定义了一个20个字符的字符串line,用于存储每行数据。然后在循环中使用fgets函数从文件中读取一行数据,并将其存储到字符串line中。如果读取失败,则打印一条错误消息并退出循环。
接下来,使用sscanf函数从字符串line中读取整数,并将其存储到数组a中。如果读取失败,则打印一条错误消息并退出循环。
这个版本的代码相比之前的版本,更加简洁并且易于维护。
阅读全文