Native/C

[실습] 커맨드 라인 아규먼트 이용해서 처리하기

aucd29 2013. 10. 2. 18:51
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 5000

void GetLine(char *szMemo);

void main(int argc, char *argv[])
{
    char c;
    char szMemo[MAX];
    int i=0, j=0;
    FILE *fp, *fp2;

    if(argc > 3) printf("error : argc가 3이상입니다.\n");

    switch(argc)
    {
    case 1:
        GetLine(szMemo);            
        fputs(szMemo,stdout);    
        break;
    case 2:        
        fp = fopen(argv[1],"r");

        if(fp == NULL)    {
            printf("File not found\n");
            exit(1);
        }
        
        while((c = fgetc(fp)) != EOF)
            printf("%c",c);

        fclose(fp);

        break;
    case 3:
        if(!strcmp(argv[1],"@"))
        {            
            fp = fopen(argv[2],"w");
            while((c = getchar()) != EOF)
                fputc(c, fp);

            fclose(fp);
        }
        else
        {
            fp = fopen(argv[1], "r");
            if(fp == NULL)
            {
                printf("File not found\n");
                exit(1);
            }

            while((c = fgetc(fp)) != EOF)
                szMemo[j++] = c;
            szMemo[j] = '\0';
            
            j = 0;
            fp2 = fopen(argv[2], "w");            
            while((c = szMemo[j++]) != '\0')
                fputc(c,fp2);
            fputc('\0',fp2);

            fclose(fp);
            fclose(fp2);
        }
        break;
    }
}

void GetLine(char *szMemo)
{
    int i=0;
    char c;

    while((*szMemo++ = c = getchar()) != EOF && i++ < MAX);
    *szMemo = '\0';
}