1、fprinf往文件中写入格式化数据
函数原型:
#include <stdio.h>
int fprintf(FILE *stream, const char *format,...);
使用fprintf函数,把数据写入了file指向的文件中
#include <stdio.h>
int main()
{
FILE *file;
char name[20];
int id;
char sex[10];
file = fopen("E:\\C\\vscode\\C\\file_io\\user.txt", "w");
if(!file)
{
puts("open fail");
return 1;
}
puts("请输入你的名字,学号和性别:");
scanf("%s %d %s",name,&id,sex);
printf("学生名:%s , 学号是: %d, 性别是: %s\n",name,id,sex);
fprintf(file,"学生名:%s 学号是:%d 性别是:%s\n",name,id,sex);
fclose(file);
}
2、scanf常见问题
char name[20];
int id;
char sex[10];
char char_num;
//此时我们定义了几个变量和数组,我们要使用scanf()函数给他们赋值
//并列输出的时候可能没有问题
scanf("%s %d %s %c",name,&id,sex,&char_num);
scanf("%s",name);
scanf("%d",&id);
scanf("%s",sex);
scanf("%c",&char_num);
//输入 nike \n 12 \n man \n 回车符就自动占了char_num的位置。
scanf()函数使用后,\n换行符留在了缓冲区,我们需要清理。
方法1:(编程风格并不好)
getchar();
方法2:(可移植性不好)
fflush(stdin);
方法3:(常用方法)
//前提有一个\n符需要处理
char ret;
while((ret=getchar()) != '\n');//并不要要进循环,只是用这里的getchar吞了缓冲区的\n
//为什么要加判断呢,因为不加判断while(char=getchar());就是一直持续输入
第一个getchar吞了开始的\n符号,不为0,一直持续输入。char只用获取没有退出条件。
//如果while((ret=getchar()) == '\n');
第一个getchar吞了开的的\n符号,\n=\n,为1,进入循环,再输入一个数就退出了,最后一个数打印不了
//如果while((ret=getchar()) != '\n');
第一个getchar吞了开的的\n符号,\n !=\n,为0。吞完了,跳出循环,正常执行下面的操作。
# 分析 while((c=getchar()) == '\n')的错误原因
scanf("%s",name);
scanf("%d",&id);
scanf("%s",sex);
while((c=getchar()) == '\n');
scanf("%c",&char_num);
输入,最后一行为打印
nike
12
man
man
nike 12 man a
输入man之后,getchar()吞了‘\n’,输入的m为第二次循环,判断为0,退出循环,char_num读取了a
如果我在man之后,继续输入回车,进行在循环里面循环,直到判断为false,吞掉下一个判断失败的数,然后执行后面操作