红联Linux门户
Linux帮助

关于键盘输入文件的运用,求教!急急急!!

发布时间:2011-07-23 11:06:08来源:红联作者:jayee
有一道linux c的题目,让我编写两个程序,要求一个程序把三个人的姓名和账号余额信息通过一次流文件I/O操作写入文件“test-4-10file”,另一个格式输出账号信息,把每个人的账号和余额意义对应显示输出。(账号和余额由键盘输入,余额可以为小数)

1、我编写了test-4-10fwrite.c和test-4-10fread.c如下:
test-4-10fwrite.c:
#include
#include
#define nmemb 3
struct test
{
char name[20];
double pay;
}s[nmemb];
int main()
{
FILE * fp;
int i;
double f;

if((fp=fopen("test-4-10file","a+"))==NULL)
{
printf("打开(创建)文件出错");
exit(0);
}
for(i=0;i {
printf("请输入帐号:");
fgets(s[i].name,20,stdin);
printf("请输入余额:");
scanf("%lf",&s[i].pay);
}
fwrite(s,sizeof(struct test),nmemb,fp);
fclose(fp);
return 0;
}
/*---------------------------------------------------------------------------------------------*/
test-4-10fread.c:

#include
#define nmemb 3
struct test /*定义结构体*/
{
char name[20];
int pay;
}s[nmemb];
int main( )
{
FILE * fp; /*定义文件变量指针*/
int i;
fp = fopen("test-4-10file", "r"); /*打开文件*/
fread(s,sizeof(struct test),nmemb,fp); /*调用fread函数从文件读取块信息*/
fclose(fp); /*关闭文件流*/
for(i=0;iprintf("帐号[%d]:%-20s余额[%d]:%d\n",i,s[i].name,i,s[i].pay);
return 0;
}
/*--------------------------------------------------------------------------------------------*/

2、然后编译
gcc test-4-10fwrite.c -o test-4-10fwrite
gcc test-4-10fread.c -o test-4-10fread

3、最后运行
./test-4-10fwrite /下面为运行结果/
请输入帐号:张三
请输入余额:12345
请输入帐号:请输入余额:200
请输入帐号:请输入余额:100
./test-4-10fread
帐号[0]:张三
余额[0]:0
帐号[1]:��@
余额[1]:0
帐号[2]: 余额[2]:0
/*-------------------------------------------*/
疑问: for(i=0;i {
printf("请输入帐号:");
fgets(s[i].name,20,stdin);
printf("请输入余额:");
scanf("%lf",&s[i].pay);
}
为什么此循环中输入账号(即fgets(s[i].name,20,stdin))只运行了一次?
应该怎么改?
我想要的结果是:
./test-4-10fwrite
请输入帐号:张三
请输入余额:12345
请输入帐号:李四
请输入余额:200
请输入帐号:王五
请输入余额:50000
./test-4-10fread
帐号[0]:张三 余额[0]:12345
帐号[1]:李四 余额[1]:200
帐号[2]:王五 余额[2]:50000

请大?指导!大谢!!!
文章评论

共有 1 条评论

  1. 木子leal 于 2011-08-08 09:44:44发表:

    顶起