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

写了个简单的文件读入并打印的程序,为什么会把最后一行多打印了一遍呢?该怎么解决

2012-02-22 
写了个简单的文件读入并打印的程序,为什么会把最后一行多打印了一遍呢?C/C++ code#include stdio.h#incl

写了个简单的文件读入并打印的程序,为什么会把最后一行多打印了一遍呢?

C/C++ code
#include <stdio.h>#include <stdlib.h>struct stock{        char name[20];        int price;};int main(){    FILE *file;    file = fopen("./stockInfo.txt",    "r");    if(file == NULL)    {            printf("open file failed!\n");                exit(-1);    }    struct stock buffer;    while(!feof(file))    {            fscanf(file, "%s %d", buffer.name, &buffer.price);            printf("%s %d", buffer.name, buffer.price);    }        return 0;}



stockInfo.txt
是在linux下用vi添加到两行记录
stocka 111
stockb 222

[解决办法]
很经典的问题了 不要用feof来判断文件是否结束 使用if (fscanf(file, "%s %d", buffer.name, &buffer.price) == 0)来代替

因为feof是要在f系列函数(fscanf fgets等)读不到数据后才会返回真

[解决办法]
while(!feof(file))
{
fscanf(file, "%s %d", buffer.name, &buffer.price);
if(!feof(file))
printf("%s %d", buffer.name, buffer.price);
}

热点排行