Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中读取文件中的字符串并将其作为lc3解编程序处理时遇到问题_C_String_Types_Lc3 - Fatal编程技术网

在C语言中读取文件中的字符串并将其作为lc3解编程序处理时遇到问题

在C语言中读取文件中的字符串并将其作为lc3解编程序处理时遇到问题,c,string,types,lc3,C,String,Types,Lc3,我想制作一个程序,扫描包含以下内容的文件: 1283 5105 lc3中两条指令的HEXCODE: 加上r1,r2,r3 和r0,r4,r5 我想让我的程序读取这个文件,并在屏幕上打印两条相应的指令。有人能告诉我有什么问题吗 #include <stdio.h> #include <stdbool.h> #include <string.h> int main(int argc, char *argv[]) { FILE *file; ch

我想制作一个程序,扫描包含以下内容的文件:

1283

5105

lc3中两条指令的HEXCODE:

加上r1,r2,r3

和r0,r4,r5

我想让我的程序读取这个文件,并在屏幕上打印两条相应的指令。有人能告诉我有什么问题吗

 #include <stdio.h>
 #include <stdbool.h>
 #include <string.h>
     int main(int argc, char *argv[]) {


FILE *file;
char hexString[5];
int dr, sr1, sr2, instruction;
file = fopen(argv[1], "r");

while (fscanf(file, "%d", hexString) != EOF){

    unsigned short int instruction = (unsigned short)strtol(hexString, NULL, 16);

        if (instruction >> 12 == 0b0001){ //op code is ADD

            dr = (instruction >> 9) & 0b111; // turns other bits to zero
            sr1 = (instruction >> 6) & 0b111;
            sr2 = (instruction) & 0b111;

            printf("add r%d r%d r%d", dr, sr1, sr2);

        } else if (instruction >> 12 == 0b0101){//op code is AND

            dr = (instruction >> 9) & 0b111;
            sr1 = (instruction >> 6) & 0b111;
            sr2 = (instruction) & 0b111;

            printf("and r%d r%d r%d", dr, sr1, sr2);
        }
}
fclose(file);
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
文件*文件;
char-hexString[5];
int dr、sr1、sr2、指令;
file=fopen(argv[1],“r”);
while(fscanf(文件“%d”,hexString)!=EOF){
无符号短整型指令=(无符号短)strtol(十六进制字符串,NULL,16);
如果(指令>>12==0b0001){//op代码为ADD
dr=(指令>>9)&0b111;//将其他位变为零
sr1=(说明>>6)和0b111;
sr2=(指令)和0b111;
printf(“添加r%d r%d r%d”,dr,sr1,sr2);
}如果(指令>>12==0b0101){//op代码为且
dr=(说明>>9)和0b111;
sr1=(说明>>6)和0b111;
sr2=(指令)和0b111;
printf(“和r%d r%d r%d”,dr,sr1,sr2);
}
}
fclose(文件);
}
当我使用gcc编译它时,不会出现complie错误


这里有一份lc3指令集供参考

欢迎使用StackOverflow。你能提供你的程序的实际输出吗,这样我们就可以知道出了什么问题?目前,我可以看到一个小错误:第一个if块中的
printf
语句打印AND指令,但您正在检查AND指令ADD@JasonBaker上面的代码没有输出任何内容,循环不工作。谢谢你提到的打字错误。只是为了确认它们没有编译错误,但是我认为我声明指令的方式是错误的。有人能建议一种替代方法吗?如果我的方式不正确/不可解释?您正在以整数(
%d
)读取带有
fscanf
的十六进制字符串。把它当作一个字符串来读,它应该会起作用。@Jongware所以它不是标准的C.Bilbo Baggins,你不应该使用这个符号。除了gcc,它不能保证在任何编译器上工作。在用C语言编程时,“它在我的机器上工作”通常是一件相当薄弱的事情。