fscanf和fprintf
fscanf的字符串是在键盘的缓冲区,fprintf是在显示器的缓冲区。
1.函数原型:
- int fprintf(FILE *fp, const char *format[,argument, ...])
- int fscantf(FILE *fp, const char *format[,address, ...])
2.功能:按格式对问件进行I/O操作
3.返回值:
- 成功,返回I/O的个数,出错或文件尾,返回EOF。
- fprintf()返回值就是写入成功的字符的个数。
- fscanf()返回值是扫描到几个数据,这个字符串不管有多长,要扫描的每一种类型算一个数据,%s算一个,%d算一个。详见eg3.
4.例子:
fprintf(fp, "%d, %6.2f, i,t"); //将i和t按%d,%6.2f格式输出到fp文件
fscanf(fp, "%d,%f", &i,&t)/ //若文件中有3,4.5,则将3送入i,4.5送入t。
eg1:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include <stdlib.h> void main1() { //printf("hello"); //fprintf(stdout, "hello");//printf只是fprintf特例 char str[100] = { 0 }; //scanf("%s", str); fscanf(stdin, "a=%s", str);//从字符串中取出,键盘缓冲区,输入时,要输入“a=abc”,下面才会打印。 fprintf(stdout, "%s", str);//int string映射到一个字符串 显示器缓冲区 getchar(); getchar(); } //1 mndadmin@yahoo.com.cn xijaxi16ytja6t7ibcrj void main2() { char str[256] = { 0 }; { int i = 1; char email[100] = "mndadmin@yahoo.com.cn"; char password[100] = "xijaxi16ytja6t7ibcrj"; sprintf(str, "%d %s %s", i, email, password); fprintf(stdout, " %s", str); } { int j; char emailx[100] = { 0 }; char passmd5[100] = { 0 }; sscanf(str, "%d%s%s", &j, emailx, passmd5); fprintf(stdout, " j=%d eamilx=%s passmd5=%s ", j, emailx, passmd5); } system("pause"); }
eg2:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef struct info7k7k { char user[50]; char password[50]; }INOF,* PINOF; void main2x() { FILE *pfr = fopen("Z:\I\尹成清华终极版C语言视频源码文档20150131\大数据相关数据\7k7k2000万_2047\2000-1\7k7kOK.txt", "r"); FILE *pfw = fopen("Z:\I\尹成清华终极版C语言视频源码文档20150131\大数据相关数据\7k7k2000万_2047\2000-1\7k7kOKwithid.txt", "w"); int i = 0; while (!feof(pfr)) { i++; INOF info1; fscanf(pfr, "%s%s", info1.user, info1.password);//提取 fprintf(pfw, "%d %s %s ", i, info1.user, info1.password);//组合 } fclose(pfr); fclose(pfw); system("pause"); } void main3x() { //int num = fprintf(stdout, "helloword%s","1234"); //printf(" %d", num);//fprintf返回值就是写入成功字符的个数 FILE *pf = fopen("C:\x.txt", "r"); int num = fprintf(pf, "helloword%s", "1234");//写入失败返回-1 printf(" %d", num); system("pause"); } void main() { //char str[128] = { 0 }; //int numa; //int numb; //int num = fscanf(stdin, "%s%d%d",str,&numa,&numb); ////返回值是扫描到几个数据,失败返回-1 //printf(" %d", num); FILE *pf = fopen("C:\x.txt", "w"); char str[128] = { 0 }; int numa; int numb; int num = fscanf(pf, "%s%d%d",str,&numa,&numb); printf(" %d", num); system("pause"); }
eg3:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> typedef struct info { char user[50]; char password[50]; }INOF,* PINOF; void main2x() { FILE *pfr = fopen("Z:\I\尹成清华终极版C语言视频源码文档20150131\大数据相关数据\7k7k2000万_2047\2000-1\7k7kOK.txt", "r"); FILE *pfw = fopen("Z:\I\尹成清华终极版C语言视频源码文档20150131\大数据相关数据\7k7k2000万_2047\2000-1\7k7kOKwithid.txt", "w"); int i = 0; while (!feof(pfr)) { i++; INOF info1; fscanf(pfr, "%s%s", info1.user, info1.password);//提取 fprintf(pfw, "%d %s %s ", i, info1.user, info1.password);//组合 } fclose(pfr); fclose(pfw); system("pause"); } void main3x() { //int num = fprintf(stdout, "helloword%s","1234"); //printf(" %d", num);//fprintf返回值就是写入成功字符的个数 FILE *pf = fopen("C:\x.txt", "r"); int num = fprintf(pf, "helloword%s", "1234");//写入失败返回-1 printf(" %d", num); system("pause"); } void main() { //char str[128] = { 0 }; //int numa; //int numb; //int num = fscanf(stdin, "%s%d%d",str,&numa,&numb); ////返回值是扫描到几个数据,失败返回-1 //printf(" %d", num); FILE *pf = fopen("C:\x.txt", "w"); char str[128] = { 0 }; int numa; int numb; int num = fscanf(pf, "%s%d%d",str,&numa,&numb); printf(" %d", num); system("pause"); }