강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

KoKo님의 프로필 이미지
KoKo

작성한 질문수

홍정모의 따라하며 배우는 C언어

13.2 텍스트 파일 입출력 예제

코드가 텍스트 파일을 받아오지 못합니다.

해결된 질문

작성

·

338

0

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
	int ch;
	FILE* fr;

	unsigned long count = 0;

	if (argc != 2)
	{
		printf("Usage : %s filename\n", argv[0]);
		exit(EXIT_FAILURE);
	}

	if ((fr = fopen(argv[1], "r")) == NULL); 
	{
		printf("Can't open %s\n", argv[1]);
		exit(EXIT_FAILURE);
	}

	while ((ch = fgetc(fr)) != EOF)
	{
		fputc(ch, stdout);

		count++;
	}

	fclose(fr);

	printf("FILE %s has %lu characters\n", argv[1], count);

	return 0;
}

보시는 바와 같이 코드를 강의코드와 똑같이 작성하고 소스코드와 같은 위치에 txt파일을 만들고(내용도 강의와 똑같습니다) 명령줄 인수도 올바르게 넣었는데 작동이 안됩니다. 실행시 Can't open my_input.txt 라 출력되는것을 보면 인수는 잘 들어갔는데 텍스트파일을 찾지 못하고 있습니다. 도대체 어떤 이유에서인지 알고 싶습니다. 부탁드립니다.

퀴즈

`fopen` 함수 사용 시, 파일 모드 "w"와 "a"의 가장 큰 차이점은 무엇일까요?

"w"는 파일을 읽기 전용으로 열고, "a"는 쓰기 전용으로 엽니다.

"w"는 파일이 없으면 오류를 반환하고, "a"는 파일을 새로 생성합니다.

"w"는 기존 내용을 지우고 쓰고, "a"는 기존 내용 뒤에 추가합니다.

"w"는 텍스트 모드이고, "a"는 바이너리 모드입니다.

답변 1

2

안녕하세요 :)

아 저도 이상해서 한참 봤는데 원인을 알았네요..

if ((fr = fopen(argv[1], "r")) == NULL); 
	{
		printf("Can't open %s\n", argv[1]);
		exit(EXIT_FAILURE);
	}

if 맨 오른쪽 끝에 ; 세미콜론을 붙이셨어요 ㅠㅠ.... 

그래서 { } 중괄호 이거는 if 에 해당 안됐던거에요.. 그냥 무조건 실행되는 코드였던것..

이런 상황이였기 때문에 NULL 리턴 안하고 파일을 잘 읽어왔음에도 exit 중괄호 코드가 실행됐던 것입니다.

아무리 디버깅 해봐도 NULL 리턴 안하고 파일 잘 읽어오는데 왜 if 문 영역으로 들어오는건지 저도 한참 찾았네요...ㅠㅠㅠ

찾아서 다행입니다. ㅎㅎ

(정말 강의 코드와 똑같이 썼는지 꼼꼼히 살펴봅시다!)

 

KoKo님의 프로필 이미지
KoKo
질문자

ㅎㅎㅎ... 정말 생각하지 못한 이유였네요. 좀 허무하긴 하지만 그래도 잘 알았으니 다행이네요. 찾아주셔서 감사합니다.

KoKo님의 프로필 이미지
KoKo

작성한 질문수

질문하기