👩‍💻 알고리즘/🔠 C

백준 11718

오브 🧙‍♂️ 2024. 2. 11. 17:45

https://www.acmicpc.net/problem/11718

 

11718번: 그대로 출력하기

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

www.acmicpc.net

 

EOF 문제

EOF는 End Of File 이라는 뜻이며, 파일의 끝, c언어에서는 EOF를 파일의 끝이라고 인식한다.

EOF는 -1의 값을 가지고 있다.

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

 

EOF 선언이 될 때까지 입력을 계속 받겠다는 뜻이 된다.

문자를 하나씩 받아오고, 받은 문자를 출력한다.

 

의문점

왜 WHILE문에는 &s고, 프린트문에는 s지?

gpt에 물어보니 이런 답변을 주었다.

C 언어에서 scanf 함수에 문자를 입력받을 때 변수의 주소를 전달해야 합니다. 이는 변수에 직접 값을 저장하는 것이 아니라 변수의 주소에 값을 저장하기 때문입니다. 그래서 scanf 함수의 인자로 변수 s의 주소인 &s를 전달합니다.

그러나 printf 함수는 단순히 변수의 값을 출력하는 것이기 때문에 주소를 전달할 필요가 없습니다. 따라서 printf 함수에는 변수 s의 값을 직접 전달합니다.

따라서 while 루프의 조건에서는 &s를 사용하여 변수 s의 주소를 전달하고, printf 함수에서는 s를 사용하여 변수 s의 값을 출력합니다.