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


实现用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'读掉。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM