提问人:Sainath S.R 提问时间:10/26/2014 最后编辑:ChandruSainath S.R 更新时间:10/26/2014 访问量:3545
C ,fscanf(),最后一行被读取两次 [duplicate]
C ,fscanf(), last line is read twice [duplicate]
问:
嗨,我正在为我的系统软件(汇编程序、加载程序等)课程在 C 文件 I/O 中做一个测试程序,我的问题是最后一行被读取了两次,我记得我的老师告诉我这是由于我错过了一些轻微的语法或错误,我忘记了它是什么,请看一下并快速帮助我。
程序
#include<stdio.h>
#include<stdlib.h>
//read from source.txt and write to output.txt
int main()
{
FILE *f1=fopen("source.txt","r");
FILE *f2=fopen("output.txt","w");
int address;
char label[20],opcode[20];
while(!feof(f1))//feof returns 1 if end of file
{
fscanf(f1,"%s\t%s\t%d",label,opcode,&address);
printf("%s\t%s\t%d\n",label,opcode,address);
fprintf(f2,"%s\t%s\t%d\n",label,opcode,address);
}
int check=fclose(f1);
int check2=fclose(f2);
printf("close status %d %d",check,check2);
return 0;
}
来源:.txt
NULL LDA 4000
ALPHA STA 5000
BETA ADD 4020// I stopped right here, DID NOT PRESS 'ENTER' , so that ain’t the issue
输出 .txt
NULL LDA 4000
ALPHA STA 5000
BETA ADD 4020
BETA ADD 4020
最后一行两次
端子输出
NULL LDA 4000
ALPHA STA 5000
BETA ADD 4020
BETA ADD 4020
最后一行两次
我不想把最后一行打印或写两次,我做错了什么,救命!
答:
2赞
perreal
10/26/2014
#1
您可以使用 的返回值,该值应等于成功扫描的项目数:fscanf
while(fscanf(f1,"%s\t%s\t%d",label,opcode,&address) == 3) {
printf("%s\t%s\t%d\n",label,opcode,address);
fprintf(f2,"%s\t%s\t%d\n",label,opcode,address);
}
下一个:FSanF 循环工作不正常
评论
!feof(f1)
是错误的。EOF 将在读取 scanf 中发生的最后一行后再循环一次。feof