프로그래밍 기본지식 11탄

최주영·2023년 1월 6일
0

C언어

목록 보기
13/15
post-thumbnail

✅ printf 함수

  • 대표적인 화면 출력 명령
  • #include <stdio.h> 에 정의되어 있음
  • 기본 형식 : int printf(const char *format, ...)
이스케이프 시퀀스출력 내용
\'작은따옴표
\"큰따옴표
\?물음표
\백슬래시
\a경고음 발생
\b백스페이스
\n줄 바꿈
\r캐리지 리턴
\t수평 탭
\v수직 탭
\f폼 피드

서식 지정자출력 데이터 형태
%c하나의 문자, 홑따옴표로 묶음
%s문자열, 쌍 따옴표로 묶음
%d부호 있는 10진 정수
%i부호 있는 10진 정수 (%d와 동일)
%f고정 소수점으로 표현한 실수 (소수점 이하 6자리까지 표현)
%o부호 없는 8진 정수
%u부호 없는 10진 정수
%x부호 없는 16진 정수 (소문자 사용)
%X부호 없는 16진 정수 (대문자 사용)
%e부동 소수점으로 표현한 실수 (e-표기법)
%E부동 소수점으로 표현한 실수 (E-표기법)
%g값에 따라 %f나 %e를 사용
%G값에 따라 %f나 %E를 사용
%%퍼센트(%) 기호 출력

✅ 파일 입출력

  • 파일 : 하나의 단위로서 취급되는 연관된 레코드의 조직적인 집단

  • 파일의 종류 : 텍스트 파일 + 이진 파일

    • 텍스트 파일 : 문자들로 이루어져 있고 연속적인 라인으로 구성된 형태의 파일 이며
                        일반적인 사람들이 읽을 수 있음 ex) 메모장 파일
    • 이진 파일 : 이진파일은 사람이 읽을 수 없으나 컴퓨터가 읽을 수 있는 파일
      ex) 이미지 파일, 사운드 파일

  • 파일 처리 루틴 : (1) 파일 열기 -> (2) 파일 읽기/ 쓰기 -> (3) 파일 닫기

  • 파일 열기 함수 fopen()

    • 문법 : FILE fopen(const char name, const char *mode) // 파일 이름, 파일 모드

      			FILE *fp;
      			fp = fopen("test.txt", "w");
      			```
       
       위와 같은 방식으로 사용하며 파일 열기 실패시 NULL 반환
       
모드설명
"r"읽기 모드로 파일을 연다.
"w"쓰기 모드로 파일 생성, 파일이 존재하면 기존 내용이 지워진다.
"a"추가 모드로 파일을 생성. 파일이 있으면 데이터가 끝에 추가 된다.
"r+"읽기와 쓰기 모드로 파일을 연다. 파일이 반드시 존재해야한다.
"w+"읽기와 쓰기 모드로 파일을 생성, 파일이 존재하면 새 데이터가 기존 데이터를 덮어쓴다.
"a+"읽기와 추가 모드로 파일을 연다. 파일이 존재하면 데이터가 파일 끝에 추가된다. 읽기는 어떤 위치에서나 가능
"b+"이진 파일 모드로 파일을 연다.

  • 파일 닫기 함수 : fclose()
    		FILE *fp;
    		fp = fopen("test.txt", "w");
    		fclose(fp);
    		```

✅ 파일 입출력 관련 문제 (1)

  • 문제 : 3*3 구구단을 (본인학번.txt) 파일로 출력하는 프로그램
// 소스코드 

#include <stdio.h>
#pragma warning(disable:4996)

int main()
{
	printf("문제 : 3 * 3 구구단을(본인학번.txt) 파일로 출력하는 프로그램 \n");
	printf("============================\n");
	int c;
	FILE *fp = NULL;
	fp = fopen("2017E7043.txt","a+");

	if (fp == NULL)
	{
		printf("파일 열기 실패\n");
		printf("============================\n");
	}
	else
	{
		printf("파일 열기 성공\n");
		printf("============================\n");
	}

	while ((c = fgetc(fp)) != EOF)
	{
		putchar(c);
	}
	printf("============================\n");
	printf("작성자 : 2017E7043 최주영\n");
	fclose(fp);
}
  • 출력 결과

✅ 파일 입출력 관련 문제 (2)

  • 문제 : 위에서 작성한 (본인학번.txt) 파일의 내용을 10줄만 읽어서
    화면으로 출력하는 프로그램
// 소스코드 

#include <stdio.h>
#pragma warning(disable:4996)

int main()
{
	printf("문제 : 3 * 3 구구단을(본인학번.txt) 파일로 출력하는 프로그램 \n");
	printf("============================\n");
	char buffer[100];
	int i;
	FILE *fp = NULL;
	fp = fopen("2017E7043.txt","a+");

	if (fp == NULL)
	{
		printf("파일 열기 실패\n");
		printf("============================\n");
	}
	else
	{
		printf("파일 열기 성공\n");
		printf("============================\n");
	}

	for (i = 0; i < 10; i++) {
		if (fgets(buffer, 100, fp) == EOF) break;
		printf("%s", buffer);
	}
	printf("============================\n");
	printf("작성자 : 2017E7043 최주영\n");
	fclose(fp);
}
  • 출력 결과

✅ 파일 입출력 관련 문제 (3)

  • 문제 : 스티브잡스(Steve Jobs) 스탠포드 연설문에 있는 알파벳의 개수를 구하는 프로그램
// 소스코드 

#include <stdio.h>
#pragma warning(disable:4996)

int main()
{
	printf("문제 : 스티브잡스(Steve Jobs) 스탠포드 연설문에 있는 알파벳의 개수는 몇 개인가 ?\n");
	printf("============================\n");
	int alpha[52] = { 0 };
	int i;
	int j = 65;
	int k = 97;
	int c, pos;
	FILE *fp = NULL;
	fp = fopen("Steve Jobs.txt","a+");

	if (fp == NULL)
	{
		printf("파일 열기 실패\n");
		printf("============================\n");
	}
	else
	{
		printf("파일 열기 성공\n");
		printf("============================\n");
	}

	while ((c = fgetc(fp)) != EOF)
	{
		if (c >= 65 && c <= 90) {
			pos = c - 65;
			alpha[pos] += 1;
		}
		if (c >= 97 && c <= 122) {
			pos = c - 71;
			alpha[pos] += 1;
		}
	}

	for (i = 0; i <= 25; i++,j++)
	{
		printf("%c : %d개\n", j, alpha[i]);
	}

	for (i = 26; i <= 51; i++, k++)
	{
		printf("%c : %d개\n", k, alpha[i]);
	}
	printf("============================\n");
	printf("작성자 : 2017E7043 최주영\n");
	fclose(fp);
}
  • 출력 결과


✅ 파일 입출력 관련 문제 (4)

  • 문제 : 스티브잡스(Steve Jobs) 스탠포드 연설문에 있는 단어의 개수를 구하는 프로그램
// 소스코드 

#include <stdio.h>
#pragma warning(disable:4996)
// 공백을 기준으로 단어의 개수를 셌습니다. ex 12,2005. -> 1단어
int main()
{
	printf("문제 : 스티브잡스(Steve Jobs) 스탠포드 연설문에 있는 단어의 개수는 몇 개인가 ?\n");
	printf("============================\n");
	int cnt = 0;
	char c;
	int last_was_space = 1;
	FILE* fp = NULL;
	fp = fopen("Steve Jobs.txt", "a+");

	if (fp == NULL)
	{
		printf("파일 열기 실패\n");
		printf("============================\n");
	}
	else
	{
		printf("파일 열기 성공\n");
		printf("============================\n");
	}

	while ((c = fgetc(fp)) != EOF)
	{
		if (c == ' ')
		{
			if (!last_was_space)
			{
				cnt++;
				last_was_space = 1;
			}
		}
		else
		{
			if (c != '\n')
			{
				last_was_space = 0;
			}
		}
	}

	if (!last_was_space) ++cnt;
	printf("Steve Jobs 파일안의 단어의 개수는 = %d개\n",cnt);
	printf("============================\n");
	printf("작성자 : 2017E7043 최주영\n");
	fclose(fp);
}
  • 출력 결과

profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글