728x90

20240312 백준 C언어 공부
11718번 그대로 출력하기

1. 문제
입력 받은 대로 출력하는 프로그램을 작성하시오.

2. 입력
입력이 주어진다. 
입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 
각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 
또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.

3. 출력
입력받은 그대로 출력한다.

>>>코드0. 실패. 입력 초과

#include <stdio.h>
int main(void){
    char c[101];
    while (scanf("%[^\n]s", c) != EOF){
        printf("%s\n", c);
    }
    return 0;
}



scanf 함수를 사용할 때 %[^\n]s 형식으로 문자열을 입력받는데, 
이때 개행 문자가 나올 때까지의 모든 문자를 입력 받는다. 
이는 입력 버퍼를 완전히 비워버리므로, 
다음에 호출되는 scanf 함수가 개행 문자를 만나도 입력을 받지 않게 된다.

예를 들어, 입력으로 "Hello World\n"가 주어졌을 때, 
이 코드는 "Hello World"를 출력하고 개행 문자를 읽지 않는다. 
그래서 다음 호출되는 scanf 함수가 개행 문자를 입력으로 받아들이게 된다.

>>>코드1. 문자열로 입력받기

#include <stdio.h>
int main(void){
    char c[101];
    while (scanf("%[^\n]s", c) != EOF){
        printf("%s\n", c);
        getchar(); //getchar()로 버퍼에 남은 개행문자를 없애버린다
    }
    return 0;
}



>>>코드2. 문자로 입력받기

#include <stdio.h>
int main(void){
    char c;
    while (scanf("%c", &c) != EOF){
        printf("%c", c);
    }
    return 0;
}


>>>코드 설명
scanf()는 ' '(space), '\t'(tab), '\n'(enter)를 모두 구분자로 사용한다. 
따라서 공백을 포함한 줄 전체를 입출력하기 위해선 getchar() 또는 fgets()가 필요하다.

>>>문제링크
https://www.acmicpc.net/problem/11718

728x90
728x90

20240112 백준 C언어 공부
10951번 A+B - 4

1. 문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

2. 입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

3. 출력
각 테스트 케이스마다 A+B를 출력한다.

>>>코드1. 실패 => 예외 처리 필요

# include <stdio.h>
# include <stdbool.h>
int main(){
    int a, b;
    while(true){
        scanf("%d %d", &a, &b);
        printf("%d\n", a+b);
    }
}



>>>코드2. 성공

# include <stdio.h>
int main(){
    int a, b;
    while(scanf("%d %d", &a, &b)!=EOF){
        printf("%d\n", a+b);
    }
}


- EOF
EOF: End-of-file, 파일 끝, 데이터 입력이 없을 때 실행을 끝냄
입력 중지를 위해 정의된 상수

728x90

+ Recent posts