C/C++ 기초

입력 읽기와 검증

입력은 실패할 수 있으므로 결과를 반드시 확인해야 합니다.

입력 읽기와 검증이란?

입력은 실패할 수 있으므로 결과를 반드시 확인해야 합니다.

사용자 입력을 읽고 잘못된 값을 거부합니다.

중요한 점

  • Compiler warning을 켜고 모두 해결하세요.
  • 각 값의 type과 lifetime을 파악하세요.
  • 입력과 배열 경계를 검증하세요.

C와 C++ 코드 예제

C
실행 →
main.c
#include <stdio.h>

int main(void) {
    int age;
    printf("Age: ");
    if (scanf("%d", &age) != 1 || age < 0) {
        puts("Invalid age");
        return 1;
    }
    printf("Next year: %d\n", age + 1);
    return 0;
}
예상 출력
Age: 20
Next year: 21
C++
실행 →
main.cpp
#include <iostream>

int main() {
    int age;
    std::cout << "Age: ";
    if (!(std::cin >> age) || age < 0) {
        std::cerr << "Invalid age\n";
        return 1;
    }
    std::cout << "Next year: " << age + 1 << '\n';
}
예상 출력
Age: 20
Next year: 21

C와 C++ 비교

scanf는 성공한 변환 수를 반환하고 std::cin은 요청한 type을 읽지 못하면 fail state가 됩니다.

C

C는 작은 절차형 API와 표현 세부 사항을 드러냅니다.

C++

C++는 저수준 모델을 유지하며 더 안전한 타입을 추가합니다.

연습 문제

두 버전을 실행하고 수정하여 각 언어의 보장을 관찰하세요.

  • 잘못된 입력과 경계값을 추가하세요.
  • -Wall -Wextra -Wpedantic으로 컴파일하세요.
  • 선언과 구현을 분리하세요.