【发布时间】:2018-11-12 01:52:27
【问题描述】:
我正在尝试使用 fscanf 读取十六进制数字的文件,该文件要么有一个字符后跟数字,要么只有数字而没有字符。 fscanf 似乎适用于文件的第一行,但仅此而已。
文件
E10
20
22
18
E10
210
12
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char** argv) {
FILE * iFile;
char instr;
unsigned long long int address;
iFile = fopen("addresses.txt", "r");
if(iFile != NULL){
while (fscanf(iFile, "%c%x", &instr, &address) > 0){
printf("%c", instr); //This just works for the first line
}
}
fclose(iFile);
return 0;
}
【问题讨论】:
-
当您说它对第一行“有效”时,您就暗示它对后续行“无效”。请定义你的意思。你看到了什么行为?你期望什么行为?
-
@paddy 所以文件的第一行是 E10 所以 instr 应该打印出 E,它确实如此。但是当它到达文件的第 5 行时,又是 E10,那个 E 没有出现。
-
第 2 行、第 3 行和第 4 行显示什么?我的猜测是它会写入上次读取
%x后留在流中的换行符。如果您使用调试器单步调试程序或添加额外的输出(例如fscanf返回的内容,或address中的值),您可能会自己弄清楚发生了什么。 -
@paddy 我想通了,只需要在第一个 % 前面添加一个空格
-
您使用了错误的格式说明符,
%x用于unsigned int
标签: c while-loop scanf