fscanf以逗号分隔先后读取int 和字符串
时间: 2024-10-07 10:01:51 浏览: 26
`fscanf` 函数在 C 标准库中用于从指定的输入流中按照指定格式读取数据。当你想以逗号分隔读取整数(int)和字符串(string),可以结合 `%d` (用于整数) 和 `%s` (用于字符串) 的格式说明符。假设你有一个文件流 `fp`,你可以这样做:
```c
#include <stdio.h>
int main() {
FILE *fp = fopen("your_file.txt", "r"); // 打开文件
if (!fp) {
printf("Failed to open file.\n");
return 1;
}
int num;
char str[50]; // 预先定义足够大的字符串数组
// 使用fscanf按逗号分隔读取
if (fscanf(fp, "%d,%s", &num, str) != 2) { // 如果读取到的数据不是两个,返回值将不是2
printf("Error reading data from file.\n");
fclose(fp);
return 1;
}
printf("Integer: %d\n", num);
printf("String: %s\n", str);
fclose(fp); // 关闭文件
return 0;
}
```
相关问题
fscanf以逗号分隔分别读取int 和字符串
`fscanf`函数在C语言标准库中用于从指定文件流中按格式读取数据。如果你想按照逗号分隔的方式,分别读取一个整数(int)和一个字符串,你可以使用`"%d,%s"`作为格式说明符。这里是一个简单的例子:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LINE_LENGTH 100
int main() {
FILE *fp = fopen("example.txt", "r"); // 打开文件
if (fp == NULL) {
printf("Error opening file.\n");
return 1;
}
int num;
char str[MAX_LINE_LENGTH];
if (fscanf(fp, "%d,%s", &num, str) != 2) { // 期望读取两个字段
printf("Error reading from file.\n");
fclose(fp);
return 1;
}
printf("Integer: %d\n", num);
printf("String: %s\n", str);
fclose(fp); // 关闭文件
return 0;
}
```
在这个示例中,`%d`用于读取整数,而`%s`用于读取以空字符('\0')结束的字符串,直到遇到下一个逗号或文件结束。
将文件中的字符串存入结构体中的枚举体怎么用fscanf实现
我们可以使用`fscanf`函数来读取文件中的字符串,并把它们存入结构体中的枚举体中。假设我们有一个文本文件,里面存储了一些学生的信息,每一行记录一个学生的姓名、年龄和性别,用逗号分隔。我们可以使用结构体和枚举体来存储这些信息,具体实现如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum Gender {
MALE,
FEMALE,
OTHER
};
struct Student {
char name[50];
int age;
enum Gender gender;
};
int main() {
FILE *fp;
struct Student students[100];
int count = 0;
fp = fopen("students.txt", "r");
if(fp == NULL) {
printf("Failed to open file!\n");
return 1;
}
while(fscanf(fp, "%[^,],%d,%d\n", students[count].name, &students[count].age, &students[count].gender) == 3) {
count++;
}
fclose(fp);
// print the information of all students
for(int i=0; i<count; i++) {
printf("Name: %s\n", students[i].name);
printf("Age: %d\n", students[i].age);
printf("Gender: ");
switch(students[i].gender) {
case MALE:
printf("Male\n");
break;
case FEMALE:
printf("Female\n");
break;
case OTHER:
printf("Other\n");
break;
default:
printf("Unknown\n");
}
printf("\n");
}
return 0;
}
```
在上面的示例代码中,我们定义了一个枚举体`Gender`,包括了三种性别。同时,我们定义了一个结构体`Student`,包括了姓名、年龄和性别三个成员变量。在`main`函数中,我们首先打开文件,然后使用`fscanf`函数逐行读取文件内容。对于每一行记录,我们使用`%[^,]`来读取姓名,`%d`来读取年龄,`%d`来读取性别,并把它们存入一个`Student`结构体中,最后使用一个`count`变量来记录一共有多少个学生。读取完文件后,我们可以使用一个循环来遍历所有学生的信息,并把它们打印出来。
需要注意的是,在使用`fscanf`函数读取文件的过程中,我们需要使用`%d`来读取枚举类型的变量,因为枚举类型本质上就是整数类型。在读取完性别信息后,我们需要把它转换为对应的枚举值。在这个示例中,我们把枚举值的类型定义为整数类型,所以没有进行转换。如果我们把枚举值的类型定义为枚举类型,那么我们需要使用`switch`语句来根据读取的整数值来设置枚举成员变量的值。
阅读全文