Как избежать конкретной строки с помощью fscanf ()? - PullRequest
1 голос
/ 05 ноября 2019

У меня есть файл, содержащий языки ассемблера для sic machine. Например:

   LDA ALPHA
   ADD BETA
   ;This is a comment line.
   ;just an example code.
   END

при чтении с помощью fscanf (), как избежать строки комментария. обратите внимание, что длина линии не является фиксированной. Также строка комментария может появиться где угодно.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main(int argc,char *argv[])
{
    if(argc<2){
        printf("No input file.\nExecution terminated.\n");
        exit(0);
    }
    FILE *infile,*outfile;
    int locctr,start=0,i,optablen=6;
    char opcode[25],label[25],operand[25];
    char optab[6][5]={"LDA","STA","LDCH","STCH","ADD","SUB"};
    infile=fopen(argv[1],"r");
    outfile=fopen("SYMTAB.txt","w");
    fscanf(infile,"%s%s%s",label,opcode,operand);
    if(strcmp(opcode,"START")==0)
    {
        start=atoi(operand);
        locctr=start;
    }
    else
        locctr=start;
    fscanf(infile,"%s%s",label,opcode);
    while(strcmp(opcode,"END")!=0)
    {
        fscanf(infile,"%s",operand);
        if(strcmp(label,"-")!=0)
            fprintf(outfile,"%s\t%d\n",label,locctr);
        for(i=0;i<optablen;i++){
            if(strcmp(opcode,optab[i])==0){
                locctr=locctr+3;
                break;
            }
        }
        if(strcmp(opcode,"WORD")==0)
            locctr=locctr+3;
        else if(strcmp(opcode,"RESW")==0)
                locctr=locctr+(3*(atoi(operand)));
            else if(strcmp(opcode,"BYTE")==0)
            {
                if(operand[0]=='X')
                    locctr=locctr+1;
                else
                    locctr=locctr+(strlen(operand)-2);
            }
            else if(strcmp(opcode,"RESB")==0)
                locctr=locctr+atoi(operand);
            fscanf(infile,"%s%s",label,opcode);
    }
    printf("Length of assambled program=%d\n",locctr-start);
    fclose(infile);
    fclose(outfile);
}

Вот мой код, как мне избежать строки комментария?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...