C语言文件读取疑问

eathonyang 2013-08-03 10:24:23
编译环境dev-cpp 4.9, windows xp

我按照书编写以下C代码:
int main(int argc, char * argv[])
{
int account ;
char name[30] ;
float balance ;
FILE * cfptr ;

if((cfptr = fopen("F:\\Dev-Cpp\\exer\\aa.txt","w")) == NULL)
{
printf("file could not open!!\n");
}
else
{
printf("enter the account, name, balance\n");
printf("enter EOF to end input\n");
printf("?");
scanf("%d%s%f", &account, name, &balance);
while( !feof(stdin) )
{
fprintf(cfptr, "%d%s%.2f\n", account, name, balance);
printf("?");
scanf("%d%s%f", &account, name, &balance);
}
fclose(cfptr);
}
}

疑问:while(!feof(stdin)) 这个循环怎么样才能正常结束,ctrl+c么??

我写到文件中的数据是:
enter the account, name, balance
enter EOF to end input
?1000 zhangsan 394.33
? 1001 lisi 843.31
? 1002 wangwu 789.34
==============================================================================

我写数据进入文件后,再编写一个读数据代码如下:
int main(int argc, char * argv[])
{
int account ;
char name[30] ;
float balance ;
FILE * cfptr ;

if((cfptr = fopen("F:\\Dev-Cpp\\exer\\aa.txt","r")) == NULL)
{
printf("file could not open!!\n");
}
else
{
printf("%-10s%-13s%s\n", "account", "name", "balance");
fscanf(cfptr, "%d%s%f", &account, name, &balance);
while( !feof(cfptr) )
{
printf("%-10d%-13s%7.2f\n", account, name, balance);
fscanf(cfptr, "%d%s%f", &account, name, &balance);
}
fclose(cfptr);
}
}

执行的时候,好像进入死循环,不停的读取数据,我只有3条数据。请问问题出在哪里了??
...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
卓而不群 2013-08-04
  • 打赏
  • 举报
回复
[/b][/b]while( !feof(cfptr) ) 读文件可以这样判断是否读完文件。但你写文件时也这样判断就只能 ctrl+c中断循环读入了。。
卓而不群 2013-08-04
  • 打赏
  • 举报
回复
你写数据到文件时,fprintf的参数没有进行格式操作,导致存在txt文件中的数据都挨着,输出文件数据时把数字也都当成字符输出。然后第二条fsancf就和你txt里边的不匹配,导致死循环一直输出第一条语句。你把你写数据的文件中fprintf(cfptr, "%d%s%.2f\n", account, name, balance);改为 fprintf(cfptr, "%4d%10s%10.2f\n", account, name, balance);
max_min_ 2013-08-04
  • 打赏
  • 举报
回复

  while( !feof(cfptr) )  //这样读 ,导致死循环的!不是这样取数据的吧
     //fread/read 函数 取数据到一个buf缓冲区,然后读出数据
        {
            printf("%-10d%-13s%7.2f\n", account, name, balance);
            fscanf(cfptr, "%d%s%f", &account, name, &balance);    
        }
max_min_ 2013-08-04
  • 打赏
  • 举报
回复


Lniux 下  Ctrl+D 中断标准输入
Windows下 Ctrl+Z 中断标准输入

qzf362269994 2013-08-03
  • 打赏
  • 举报
回复
ctrl+z吧,

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧