У меня есть файл, содержащий языки ассемблера для 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);
}
Вот мой код, как мне избежать строки комментария?