首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言资料读取疑问

2013-08-09 
C语言文件读取疑问编译环境dev-cpp 4.9, windows xp我按照书编写以下C代码:int main(int argc, char * arg

C语言文件读取疑问
编译环境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条数据。请问问题出在哪里了??
[解决办法]



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


[解决办法]
你写数据到文件时,fprintf的参数没有进行格式操作,导致存在txt文件中的数据都挨着,输出文件数据时把数字也都当成字符输出。然后第二条fsancf就和你txt里边的不匹配,导致死循环一直输出第一条语句。你把你写数据的文件中fprintf(cfptr, "%d%s%.2f\n", account, name, balance);改为 fprintf(cfptr, "%4d%10s%10.2f\n", account, name, balance);  

热点排行