首页 > 编程语言 > 详细

c语言中关于使用fprintf在文件中写入数据的问题

时间:2019-11-18 00:32:20      阅读:299      评论:0      收藏:0      [点我收藏+]

实现用C语言在文件user.txt中输入几个用户的数据(包括姓名,年龄等)

代码如下

#include<stdio.h>

int main(void){

  FILE*file1;

  int age;

  char name[25];

  char k;

  file1=fopen("user.txt","w");

  if(file1=NULL){

  printf("error opening");

  return 1;

  }

  while(1){

  printf("\n请输入姓名:");

  scanf("%s",name);

  printf("\n请输入这个人的年龄:");

  scanf("%d",&age);

  fprintf("file1","姓名:%s    年龄:%d",name,age);

  printf("\n是否要继续输入下一个人的信息?(Y/N):");

  scanf("%c",&k);

  if(k=="y"||k=="Y"){

  continue;

  }

 else{

 break;

  }

  } 

  fclose("file1");

  return 0;

  }

 其实此代码是有漏洞的,我也是看了老师的课之后才发现的。

 就是在你用scanf函数输入人的姓名和年龄的时候情况是这样的,例如:你输入姓名mike,年龄18时,‘m‘ ‘i‘ ‘k‘ ‘e‘ ‘\n‘ 18 ‘\n‘,  这才是你的输入,是输入在缓冲区里的,注意这两个回车也就是两个换行符"\n"。第一次输入的是‘m‘ ‘i‘ ‘k‘ ‘e‘ ‘\n‘,name变量读取并存贮的的是‘m‘ ‘i‘ ‘k‘ ‘e‘ ,并把下一个‘\n‘留了下来。下一个变量age先读取的是‘\n‘,但是这个age的int变量不符合,因此略去,所以int读取并存储了18。然而变量k是字符型,要从缓冲区里读取一个字符,它就会先读取‘\n‘,这里的k就实现不了它的功能,发生了错误。解决的办法是在给k赋值前用一个getchar();函数把这个‘\n‘读掉。可以在 fprintf("file1","姓名:%s    年龄:%d",name,age);之后加一句getchar();也可以在if语句之前使用一个getchar();或者使用一个循环while(getchar()==‘\n‘)。把这个‘\n‘读掉。

 

c语言中关于使用fprintf在文件中写入数据的问题

原文:https://www.cnblogs.com/Ybossy/p/11879229.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!