while(fscanf(r, “%d%s%s%d%s”, &a[i].no, a[i].name, a[i].sex, ati].age, &a[i].add)!= EOF)
时间: 2024-10-01 14:09:06 浏览: 28
scanf/printf中%的使用方法
`fscanf` 函数用于从输入流中读取格式化的数据。在给定的示例中,它尝试从名为 `r` 的输入流中逐个读取整数、字符串、整数、字符串(共五次),并将这些数据存储到数组 `a[i]` 的相应字段中。
下面是一个使用 `fscanf` 的 while 循环示例[^1]:
```c
#include <stdio.h>
// 假设 a 是已初始化的结构体数组
typedef struct {
int no;
char name[50];
char sex;
int age;
char add[50];
} Item;
int main() {
FILE *r; // 打开文件或其他输入源
r = fopen("input.txt", "r"); // 假设输入文件名是 "input.txt"
if (r != NULL) {
int i = 0;
while (fscanf(r, "%d%s%s%d%s", &a[i].no, a[i].name, &a[i].sex, &a[i].age, a[i].add) == 5 && !feof(r)) { // 当读取到五个元素或遇到文件结束符时停止
i++;
}
fclose(r);
// ...后续处理数据...
} else {
printf("Error opening file.\n");
}
return 0;
}
```
在这个循环里,`fscanf` 每次成功读取到一组匹配的格式化数据(整数、两个字符串和一个整数)时,会递增索引 `i` 并继续下一轮循环。如果在任何时候无法完全读取到五组数据(比如遇到空格或不正确的输入格式),则可能提前退出循环。
阅读全文