시스템 프로그래밍 프로젝트 #6

Problem: 입력 데이터 : [Command.txt 0.00MB](https://blog.kakaocdn.net/dna/bnbU30/btqBgeimBnY/AAAAAAAAAAAAAAAAAAAAAAPakDbTA4jf0WyG_DmDE76emfyLiazho4x1advtOToN/Command.txt?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1788188399&allow_ip=&allow_referer=&signature=2iAm290NW4CFkRgpHKAQHRqBvxw%3D&attach=1&knm=tfile.txt) Execution Result: Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 #include<stdio.h> #include<string.h> #include<stdlib.h> void PrintAssm(char* name_buf, int name_size); struct OPTAB{ char name[8]; int len; } Wordtab[] = { {"LDA", 3}, {"STA", 4}, {"ADD", 5}, {"TIX", 2}, {"CMP", 6} }; int main() { char name_buf[8]; int wordtab_size = sizeof(Wordtab)/12; // Wordtab에 정의된 단어 갯수, 12 = size of char[8] + int FILE* fp; if((fp = fopen("Command.txt", "r"))==NULL) { printf("file not found...\n"); exit(1); } while(fgets(name_buf, sizeof(name_buf), fp) != NULL) { // fgets() 함수는 scanf나 gets()와는 달리 뒤에 개행문자가 붙는다 if(name_buf[0] == '\n') // name_buf 배열 맨 처음이 개행문자이면 메시지 출력 없이 무시 continue; if(name_buf[strlen(name_buf) - 1] == '\n') // name_buf 배열 맨 끝이 개행문자이면 name_buf[strlen(name_buf) - 1] = '\0'; // naem_buf 배열 맨 끝에 붙은 개행문자 제거 PrintAssm(name_buf, wordtab_size); } fclose(fp); } void PrintAssm(char* name_buf, int wordtab_size){ static int k=1; // 줄 번호를 나타내는 변수 static int loc=0; // 단어의 시작 위치를 나타내는 변수 int i, res=-1; for(i=0; i<wordtab_size; i++){ res = strcmp(name_buf, Wordtab[i].name); // strcmp : 두 문자열이 같으면 0 리턴 if(res==0){ break; } } if(i==wordtab_size){ printf(" Undefined word\n"); // Wordtab 배열 안에 정의되어 있지 않는 명령어면 출력하고 단어 무시 } else{ if(k < 10) printf(" "); printf("%d, %.2X, %s, %.2d\n", k, loc, Wordtab[i].name, Wordtab[i].len); loc += Wordtab[i].len; // 단어의 해당길이를 더해서 다음 시작 위치를 알려줌 k++; } } Explanation: ...

November 21, 2019 · 2 min · Sobamemil