GPT 설명 내 설명 이렇게하니 좀 보기도 골때리고 쓸때도 너무 시간이 오래걸려 비효율적인 것 같다.
GPT가 알려준 것을 토대로 그냥 내가 가꾸어서 쓰는게 나은 것 같아서 지금부터 좀 변경해 보려고 한다.
#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 를 서식지정자 라고 한다.
" "안에 변수 값을 넣으려면 서식지정자를 따라서 넣어주면 된다.
scanf("%d", &num); // scanf 사용
아마 scanf 를 사용하면 오류가 발생할것이다. -> 오류해결
입력은 다음과 같다.
여기서도 서식지정자를 " "안에 넣고 뒤에 무언가를 & +변수이름 추가했다.
이것은 무엇일까?
&는 주소 연산자 라고 하는 것이다.
그럼 주소 연산자는 왜 필요할까?
scanf 함수는 사용자로 부터 입력받은 값을 변수에 저장하는 함수이다.
그런데 변수의 값을 직접 수정할 수 없기 때문에 변수의 주소를 전달해야 한다.
그렇기 때문에 주소 연산자를 사용해서 전달해야 한다.
이것을 참조에 의한 전달(Call by reference) 라고 한다.
scanf 함수에서 잘못된 입력 이 들어오면 프로그램이 예상치 못한 동작을 할 수 있다.
그림으로 제공

#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 는 데이터 크기를 명시해야 한다.