[문제]
두 개의 텍스트 파일이 같은지 다른지를 확인하는 프로그램을 작성해 보자. 단순히 공백문자 하나가 차이를 보여도 두 텍스트 파일은 다른 것으로 판별이 나야 한다.
조건1) fgets을 사용하시오
조건2) fgets함수의 호출 실패에 대한 경우는 제외할 것
[실행결과]
아래는 실행파일의 이름이 project001.exe이고 비교의 대상이 되는 두 파일의 이름이 각각 test1.txt, test2.txt인 경우 실행의 예이다.
[수정할 코드]
#include <stdio.h>
#include <string.h>
#define MAX_STR_SIZE 50
int main(int argc, char* argv[])
{
char str1[MAX_STR_SIZE];
char str2[MAX_STR_SIZE];
int IsSameFlag = 1;
if (argc != 3) {
printf("usage error!!\n");
printf("Project.exe file1.txt file2.txt");
return -1;
}
FILE* fp1 = fopen(argv[1], "rt");
FILE* fp2 = fopen(argv[2], "rt");
if (fp1 == NULL || fp2 == NULL) {
printf("file open error!\n");
return -1;
}
while (fgets(str1, MAX_STR_SIZE, fp1) != NULL && fgets(str2, MAX_STR_SIZE, fp2) != NULL) {
if (strcmp(str1, str2) != 0) {
IsSameFlag = 0;
break;
}
}
if (IsSameFlag == 1) {
if(feof(fp1) == 0 || feof(fp2) == 0) IsSameFlag = 0;
}
if (IsSameFlag == 0) printf("파일이 일치하지 않습니다.\n");
else
{
printf("파일이 일치합니다.\n");
}
fclose(fp1);
fclose(fp2);
return 0;
}
[코드]
#include<stdio.h>
#include<string.h>
const int SAME = 1;
const int DIFF = 2;
int main(int argc, char* argv[])
{
FILE* fp1;
FILE* fp2;
char str1[100], str2[100];
int state1, state2;
int flag = SAME;
if (argc != 3)
{
printf("형식: 실행파일 비교파일1.txt 비교파일2.txt \n");
return 1;
}
/* 파일의 개방 */
fp1 = fopen(argv[1], "rt");
fp2 = fopen(argv[2], "rt");
if (fp1 == NULL || fp2 == NULL)
{
printf("File open error! \n");
return 1;
}
/* 파일 비교 */
while (1)
{
if (feof(fp1) != 0 && feof(fp2) != 0) break;
fgets(str1, sizeof(str1), fp1);
fgets(str2, sizeof(str2), fp2);
if (strcmp(str1, str2) != 0)
{
flag = DIFF;
break;
}
}
if (flag == SAME)
fputs("두 개의 파일은 완전히 일치합니다.", stdout);
else
fputs("두 개의 파일은 불일치 합니다.", stdout);
/* 파일의 종결 */
state1 = fclose(fp1);
state2 = fclose(fp2);
if (state1 != 0 || state2 != 0)
{
printf("File close error! \n");
return 1;
}
return 0;
}
<참고>
윤성우의 열혈 C 프로그래밍
'프로그래밍 언어 문제 > C' 카테고리의 다른 글
[C언어] 연습문제2 (0) | 2022.05.06 |
---|---|
[C언어] 연습문제3 (0) | 2022.05.05 |
[C언어] 연습문제4 (0) | 2022.05.05 |
[C언어] 연습문제5 (0) | 2022.04.20 |
[C언어] 연습문제6 (0) | 2022.04.16 |