본문 바로가기

프로그래밍 언어 문제/C

[C언어] 연습문제1

[문제]

두 개의 텍스트 파일이 같은지 다른지를 확인하는 프로그램을 작성해 보자. 단순히 공백문자 하나가 차이를 보여도 두 텍스트 파일은 다른 것으로 판별이 나야 한다.

조건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