fprintf(指定的格式写到文件里面。适用于所有的输出流,可以打印在屏幕上面)+fscanf(指定的格式读取出来,适用于所有的输入流)
fprintf(指定的格式写到文件里面)
两个函数是一样的
打开文件
写文件 fprintf以指定的格式写到信息里面
同时这里是文本的形式写进去的 因为我们都读得懂
代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
struct MyStruct
{
char name[20];
int age;
};
int main()
{
struct MyStruct s = { "张三",23 };
FILE* ps = fopen("fprintf.txt", "w");//这里我们进行写入一个文件,没有的话会自动创建一个文件
if (ps == NULL)
{
perror("fopen:w:");
return 1;
}
fprintf(ps, "%s %d", s.name, s.age);//以指定格式写入文件
fclose(ps);//关闭文件
ps = NULL;//指针指向空指针
return 0;
}
——————————————————————————————————————————
fscanf(指定的格式读取出来,适用于所有的输入流)
同理这个和scanf是一样的
数组名本身就是地址
fscanf
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
struct MyStruct
{
char name[20];
int age;
};
int main()
{
struct MyStruct s = { "张三",23 };
FILE* ps = fopen("fprintf.txt", "w");
if (ps == NULL)
{
perror("fopen:w:");
return 1;
}
//这里是把内容写到文件里面
fprintf(ps, "%s %d", s.name, s.age);//写入文件
fclose(ps);
ps = NULL;
//只读,因为你剩下的操作是文件读取,所以这里不行w,但是可以是只读,读取文件
FILE* pf = fopen("fprintf.txt", "r");
if (pf == NULL)
{
perror("fopen:r:");
return 1;
}
//这里是读取内容,不读取是无法直接打印文件内容的
fscanf(pf, "%s %d", s.name, &(s.age));//数组首元素就是地址 不需要取地址 ,此时也就是读取成功
printf("%s %d\n", s.name, s.age);//表纯输出流打印文件
fprintf(stdout, "%s %d\n", s.name, s.age);//指定输出流,打印文件
fclose(pf);
pf = NULL;
return 0;
}
———————————————————————————————————————————
fprintf(可以打印在屏幕上面)
适用于所有的输出流,可以打印在屏幕上面
也就是你可以用fprintf写写入里面,用fscanf进行读取,再用fprintf进行打印
当然这里前面的参数是文件,我们指向的是文件,然后才能打印出来
stdout(补充说明)
stdout 是 C 标准库中的一个文件流,代表标准输出。标准输出通常指的是计算机屏幕,但它也可以被重定向到其他地方,比如一个文件。在 C 语言中,stdout 用于打印程序的输出信息,比如 printf 函数和 fprintf 函数输出的内容。
当你调用 printf 或者 fprintf 函数时,如果不指定文件指针参数,这些函数会默认使用 stdout 作为输出目标。例如:
printf("Hello, World!");
这行代码会将在 stdout 上打印 "Hello, World!"。默认情况下,stdout 指向控制台(屏幕),所以你会在屏幕上看到输出。
你还可以将 stdout 重定向到文件。例如,你可以使用系统命令行将输出重定向到文件:
./program > output.txt
这会使得 program 程序的标准输出被重定向到 output.txt 文件,而不会在屏幕上显示任何内容。
在 C 程序中,你也可以显式地将输出写入 stdout:
fprintf(stdout, "This will go to the screen or a file if redirected.\n");
因为这个不是标准输出流,是指定输出流,所以我们可以指定格式。
这里我们发现我们可以用fprintf函数打印出来
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
struct MyStruct
{
char name[20];
int age;
};
int main()
{
struct MyStruct s = { "张三",23 };
FILE* ps = fopen("fprintf.txt", "w");
if (ps == NULL)
{
perror("fopen:w:");
return 1;
}
//这里是把内容写到文件里面
fprintf(ps, "%s %d", s.name, s.age);//写入文件
fclose(ps);
ps = NULL;
//只读,因为你剩下的操作是文件读取,所以这里不行w,但是可以是只读,读取文件
FILE* pf = fopen("fprintf.txt", "r");
if (pf == NULL)
{
perror("fopen:r:");
return 1;
}
//这里是读取内容,不读取是无法直接打印文件内容的
fscanf(pf, "%s %d", s.name, &(s.age));//数组首元素就是地址 不需要取地址
printf("%s %d\n", s.name, s.age);//表纯输出流打印文件
fprintf(stdout, "%s %d\n", s.name, s.age);//指定输出流,打印文件
fclose(pf);
pf = NULL;
return 0;
}
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
sprintf(指定格式转化成字符串)+sscanf(字符串转化成指定格式)
sprintf(指定格式转化成字符串)
格式化的数据转化成字符串sprintf
sprintf
是一个在 C 语言中定义的函数,它的作用是将格式化的字符串和参数转换成字符串,并将结果存储在指定的字符数组中。因此,sprintf
可以用来将文件中的文档内容转化成字符串,也可以用来将刚编写的结构体代码转化为字符串。具体使用方式取决于程序的具体需求。
这里已经转化为字符串
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
struct MyStruct
{
char name[20];
int age;
};
int main()
{
struct MyStruct s = { "张三",23 };
FILE* ps = fopen("fprintf.txt", "w");
if (ps == NULL)
{
perror("fopen:w:");
return 1;
}
//这里是把内容写到文件里面
fprintf(ps, "%s %d", s.name, s.age);//写入文件
fclose(ps);
ps = NULL;
//只读,因为你剩下的操作是文件读取,所以这里不行w,但是可以是只读,读取文件
FILE* pf = fopen("fprintf.txt", "r");
if (pf == NULL)
{
perror("fopen:r:");
return 1;
}
//这里是读取内容,不读取是无法直接打印文件内容的
fscanf(pf, "%s %d", s.name, &(s.age));//数组首元素就是地址 不需要取地址
//转化为字符串的形式
char buf[100] = { 0 };//因为是转化成字符串的形式,所以需要用一个数组进行接收
sprintf(buf, "%s %d", s.name, s.age);
printf("字符串打印: %s \n", buf);
fclose(pf);
pf = NULL;
return 0;
}
———————————————————————————————————————————
sscanf(字符串转化成指定格式)
sscanf语法说明
这里是 从结构体读取数据
这里是从buf里面读取
所以sscanf也就是前面加上一个需要读取的名称
两次打印的对比,一样的,但是此时已经不是字符串的格式已经是指定的格式了
代码总结
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
struct MyStruct
{
char name[20];
int age;
};
int main()
{
struct MyStruct s = { "张三",23 };
FILE* ps = fopen("fprintf.txt", "w");
if (ps == NULL)
{
perror("fopen:w:");
return 1;
}
//这里是把内容写到文件里面
fprintf(ps, "%s %d", s.name, s.age);//写入文件
fclose(ps);
ps = NULL;
//只读,因为你剩下的操作是文件读取,所以这里不行w,但是可以是只读,读取文件
FILE* pf = fopen("fprintf.txt", "r");
if (pf == NULL)
{
perror("fopen:r:");
return 1;
}
//这里是读取内容,不读取是无法直接打印文件内容的
fscanf(pf, "%s %d", s.name, &(s.age));//数组首元素就是地址 不需要取地址
//转化为字符串的形式
char buf[100] = { 0 };//因为是转化成字符串的形式,所以需要用一个数组进行接收
sprintf(buf, "%s %d", s.name, s.age);
printf("字符串打印: %s \n", buf);
//字符串转化为带有格式的形式
sscanf(buf, "%s %d", s.name, &(s.age));//我们这里还是这个格式, 把数组转化成格式给到结构体里面
fprintf(stdout, "按照格式打印:%s %d\n", s.name, s.age);//指定输出流,打印文件
fclose(pf);
pf = NULL;
return 0;
}
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
printf(标准输出流)+scanf(标准输入流)+函数的总结
这里说明一下,printf和scanf经常使用,就不详细举例,直接进行说明。
在C语言中,printf、fprintf、sprintf、scanf、sscanf和fscanf是用于输入和输出数据的函数。下面是它们的区别和通常的使用场景:
- printf
-
- printf函数用于将格式化的数据输出到标准输出(通常是终端或控制台)。
- 它不会在输出字符串的末尾添加换行符,所以如果需要换行,需要在格式字符串中显式包含\n。
- 示例:printf("Hello, World!\n"
- fprintf
-
- fprintf函数用于将格式化的数据输出到任意指定的文件指针(FILE *)。
- 它可以将数据输出到文件、网络流等。
- 示例:FILE *fp = fopen("file.txt", "w"); fprintf(fp, "Hello, World!\n"); fclose(fp);
- sprintf
-
- sprintf函数用于将格式化的数据输出到一个字符数组或字符串。简单的说就是转化成字符串格式
- 它不会在输出字符串的末尾添加换行符。
- 示例:char buffer[100]; sprintf(buffer, "Hello, World!\n"); printf("%s", buffer);
- scanf
-
- scanf函数用于从标准输入(通常是键盘)读取格式化的数据。
- 它等待用户输入,并根据指定的格式解析输入的数据。
- 示例:int num; scanf("%d", &num); printf("You entered: %d\n", num);
- sscanf
-
- sscanf函数用于从字符串中读取格式化的数据。可以把字符串转化为任何你需要的格式
- 它将字符串中的数据按照指定的格式解析成变量。
- 示例:char str[] = "1234"; int num; sscanf(str, "%d", &num); printf("You entered: %d\n", num);
- 可以把字符串转化为任何你需要的格式
- fscanf
-
- fscanf函数用于从任意指定的文件指针读取格式化的数据。
- 它可以从文件、网络流等读取数据。
- 示例:FILE *fp = fopen("file.txt", "r"); int num; fscanf(fp, "%d", &num); fclose(fp); printf("You entered: %d\n", num);
格式化的数据就是带有格式的数据
比如整形 字符 浮点型
看到结构体不方便 需要转化为字符串 那就是 sprintf
需要转化回来 那就用sscanf, fscanf
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————