fscanf没有从文件中读取字符

时间:2017-02-08 07:40:55

标签: c file-io scanf

我有一个程序从文件中读取并将汇编代码转换为VM机器代码。根据操作码,说明具有不同的数据类型,因此我的读者看起来像这样:

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。我已经看过似乎适用于其他人的解决方案,但由于某种原因,它们似乎不适用于此。

1 个答案:

答案 0 :(得分:1)

您已将变量immediate声明为unsigned short而行

fscanf(inF," %c %d", &r1, &immediate);

假设它是一个整数。在这种情况下,行为是不确定的。