写了个简单的文件读入并打印的程序,为什么会把最后一行多打印了一遍呢?该怎么解决
写了个简单的文件读入并打印的程序,为什么会把最后一行多打印了一遍呢?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);
}