C언어 - 입력과 출력

안태현·2025년 1월 30일

C언어

목록 보기
4/5

GPT 설명 내 설명 이렇게하니 좀 보기도 골때리고 쓸때도 너무 시간이 오래걸려 비효율적인 것 같다.
GPT가 알려준 것을 토대로 그냥 내가 가꾸어서 쓰는게 나은 것 같아서 지금부터 좀 변경해 보려고 한다.

1. 출력

#include <stdio.h>

int main() {
    // 변수 선언
    int a = 10;
    
    // 정수 입력 받기
    printf("정수를 입력하세요: ");

    return 0;
}

출력문 즉 printf(); 에서 우리가 원하는 출력 값을 넣는 곳이다. 위 코드에서 만약 a 를 출력하려면 어떻게 해야할까?

입력문은 언어마다 다 다르다.

printf("\"출력\" (string), %d (int), %f (float)\n", 42, 3.14);  // C언어

print("\"출력\" (string),", 42, "(int),", 3.14, "(float)")      # 파이썬

std::cout << "\"출력\" (string), " << 42 << " (int), " << 3.14 << " (float)" << std::endl;  // C++

System.out.println("\"출력\" (string), " + 42 + " (int), " + 3.14 + " (float)");  // Java

console.log("\"출력\" (string),", 42, "(int),", 3.14, "(float)");  // JavaScript

puts "\"출력\" (string), #{42} (int), #{3.14} (float)"           # Ruby

print("\"출력\" (string),", 42, "(int),", 3.14, "(float)")        // Swift
[out]
"출력" (string), 42 (int), 3.140000 (float)  // C언어
"출력" (string), 42 (int), 3.14 (float)      // 파이썬
"출력" (string), 42 (int), 3.14 (float)      // C++
"출력" (string), 42 (int), 3.14 (float)      // Java
"출력" (string), 42 (int), 3.14 (float)      // JavaScript
"출력" (string), 42 (int), 3.14 (float)      // Ruby
"출력" (string), 42 (int), 3.14 (float)      // Swift

비교적 쉬워보이는 것도있고 어려워 보이는 출력문들도 많다.
나는 그 중에 C언어가 좀 어려워 보인다.

c언어는 수 또는 변수에 대한 출력문이 이렇게 되어있다.
예시)

int a = 10;
printf("int a의 값은 : %d", a); 
[out]
int a의 값은 : 10

그럼 변수 a의 값은 어디에 들어가는가?
바로 %d 에 들어간다

여기서 %d서식지정자 라고 한다.
" "안에 변수 값을 넣으려면 서식지정자를 따라서 넣어주면 된다.

2. 입력

scanf("%d", &num);  // scanf 사용

아마 scanf 를 사용하면 오류가 발생할것이다. -> 오류해결

입력은 다음과 같다.
여기서도 서식지정자" "안에 넣고 뒤에 무언가를 & +변수이름 추가했다.
이것은 무엇일까?

&주소 연산자 라고 하는 것이다.

그럼 주소 연산자는 왜 필요할까?

scanf 함수는 사용자로 부터 입력받은 값을 변수에 저장하는 함수이다.

그런데 변수의 값을 직접 수정할 수 없기 때문에 변수의 주소를 전달해야 한다.
그렇기 때문에 주소 연산자를 사용해서 전달해야 한다.

이것을 참조에 의한 전달(Call by reference) 라고 한다.

scanf 함수에서 잘못된 입력 이 들어오면 프로그램이 예상치 못한 동작을 할 수 있다.

3. 서식지정자

그림으로 제공

오류

#define _CRT_SECURE_NO_WARNINGS

를 맨 코드 맨위에 추가하거나,

#include <stdio.h>

int main() {
    int num;
    char str[50];  // 크기를 명시해야 합니다.

    printf("정수 값을 입력하세요: ");
    scanf_s("%d", &num);  // 정수 입력 받기

    printf("문자열을 입력하세요: ");
    scanf_s("%s", str, sizeof(str));  // 문자열 입력 받기 (배열 크기를 지정)

    printf("입력된 값: %d, %s\n", num, str);
    return 0;
}

위처럼

scanf_s();

를 사용하여 해결할 수 있다.
그러나 scanf_s데이터 크기를 명시해야 한다.

profile
ENTP의 무지성 코딩

0개의 댓글