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