У меня есть программа, которая читает из файла и преобразует код сборки в машинный код VM. Инструкции имеют различные типы данных в зависимости от опкода, так что мой читатель выглядит следующим образом:fscanf not reading char из файла
while(!feof(inF)) {
fscanf(inF, "%s",&temp); //analyse first string and branch into if statement
printf("%s\n", temp);
if (strcmp(temp, "NOP") == 0 || strcmp(temp, "nop") == 0) {
fprintf(outF, "%i\n", 0);
}
else if (strcmp(temp, "LDI") == 0 || strcmp(temp, "ldi") == 0) {
opcode = LDI; //opcode 1
fscanf(inF," %c %d", &r1, &immediate); //get r1 and immediate
printf("R1: %i\n", r1);
printf("I: %i\n", immediate);
r1 = getReg(r1);
r2 = 0;
subop = 0;
output = (opcode << 27)|(r1 << 24)|(r2 << 21)|(subop << 16)|(immediate);
fprintf(outF, "%x\n", output);
}
}
С линией чтения LDI A 1024
, я получаю выход:
LDI
R1: 0
I: 1024
Вместо ожидаемого
LDI
R1: 65
I: 1024
Похоже, что fscanf
не читает char
. Я смотрел на решения, которые, казалось, работали для других, и они почему-то не работают.
'fscanf (inF,"% c% d ", & r1, & instant);' -> 'fscanf (inF,"% i% d ", & r1, & instant);' предполагается, что 'r1' является' int' – LPs
Какой тип 'r1'? – Marian
Замечание о том, почему 'while (! Feof (inF))' неверно: http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong –