實現用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'讀掉。