文件io-fprintf-输出到文件

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,吞掉下一个判断失败的数,然后执行后面操作

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值