C ,fscanf(), 最后一行被读取两次

标签 c file-io printf scanf feof

<分区>

您好,我正在为我的系统软件(汇编器、加载器等)类(class)做一个 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

//最后一行两次

我不希望最后一行被打印或写入两次,我做错了什么,求助!

最佳答案

你可以使用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);
}

关于C ,fscanf(), 最后一行被读取两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26570782/

相关文章:

c - 使用 printf 打印十六进制格式的字符串,结果失真

c - 每行打印相同数量的字符

c++ - Printf和Scanf C++实现

c - (*ptr)[10] 是什么意思?

c - 为什么在写入时删除文件时 write() 不会失败?

c - 非阻塞 UDP 端口打开时打开文件失败

python - 如何使用python检查文件夹是否是快捷方式?

macos - OSX 上每个进程的最大打开文件句柄数(以及如何增加)

java - JNI GetMethodID 不适用于内部类的构造函数

Contiki:未定义对单独源文件中定义的函数的引用