读书人

在Linux下写了个简单的文件读并打印出

发布时间: 2012-02-27 10:00:22 作者: rapoo

在Linux下写了个简单的文件读并打印出来的程序,为什么最后一条记录打印了两遍呢?

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

[解决办法]
在c++版有同样问题 也是你问的吧
[解决办法]
feof在文件没有数据的时候,也就是文件结尾还能true一次,下一次才会跳出循环,所以最好用
fscanf(file, "%s %d", buffer.name, &buffer.price) == 2作为循环条件
[解决办法]
C/C++ code
    while(!feof(file))  /*fscanf到达文件尾时,并没有立刻执行feof(file),  *而是在printf之后才去检测是否到达文件尾的.  *因此会再一次输出buffer的内容  *而你也没有在读到buffer里面前memset,  *所以最后一条会重复输出  */  {            fscanf(file, "%s %d", buffer.name, &buffer.price);            printf("%s %d", buffer.name, buffer.price);    }    while(1)    {        memset(&buffer,0x00,sizeof(struct stock));            fscanf(file, "%s %d", buffer.name, &buffer.price);        if(feof(file))break;/*到达文件尾立刻跳出*/            printf("%s %d\n", buffer.name, buffer.price);    } 

读书人网 >UNIXLINUX

热点推荐