我是C编程新手。我有一个简单的问题。那么为什么fscanf
与fopen(读取模式)不能使用?我的意思是,从我学到的,我必须使用fopen(写模式)首先,然后fopen(读模式)将工作。如果我在fopen(写模式)之前先使用fopen(读模式),它就不会像这段代码一样工作。另一件事是,为什么fscanf
不能在这段代码中读取空格?我已经尝试了%*s
而fopen(读取模式)第一,它没有工作。
int main() {
FILE *fp;
fp = fopen("Test.txt", "r+");
char name[100], hobby[100];
int age;
fscanf(fp, "Name:%*snAge:%dnHobby:%*s", &name, &age, &hobby);
printf("nScan Resultn%sn%dn%s", name, age, hobby);
fclose(fp);
return 0;
}
用法文件:
Name:This is a test
Age:21
Hobby:Play games
当我运行它时:
Scan Result
`░
0
>m
Process returned 0 (0x0) execution time : 0.016 s
Press any key to continue.
我错过什么了吗?或者这是不可能的?答案与代码给出将非常有助于我更好地学习,谢谢你。
%s
读取单个单词,使用%[^n]
读取所有内容,直到换行符。
在扫描字符串时,不要将&
放在数组名之前。数组作为函数实参传递时,会自动衰变为指针。
fscanf(fp,"Name: %[^n] Age: %d Hobby: %[^n]",name,&age,hobby);
或者使用fgets()
一次读取一行,然后您可以使用sscanf()
从中提取。
char line[100];
fgets(line, sizeof line, fp);
sscanf(line, "Name: %[^n]", name);
fgets(line, sizeof line, fp);
sscanf(line, "Age: %d", &age);
fgets(line, sizeof line), fp;
sscanf(line, "Hobby: %[^n]", hobby);