C++ 입력받기

1. 입력이 없을 때까지 입력받기

 

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

 

10951번: A+B - 4

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

www.acmicpc.net

 

 - 정수 입력받기

#include <stdio.h>

int main()
{
	int a = 0, b = 0;

	while (scanf_s("%d %d", &a, &b) != EOF) {
		printf("%d\n", a + b);
	}

	return 0;
}
#include <stdio.h>

int main()
{
	int a = 0, b = 0;

	while (scanf("%d %d", &a, &b) == 2) {
		printf("%d\n", a + b);
	}
	return 0;
}

 

 

2. 여러줄 입력받기(공백 포함 상관없음)

 

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

 

11718번: 그대로 출력하기

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

www.acmicpc.net

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

 

11719번: 그대로 출력하기 2

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이

www.acmicpc.net

#include <stdio.h>

int main()
{
	char c;

	while (scanf_s("%c", &c) != EOF) {
		printf("%c", c);
	}

	return 0;
}

+ 위같은 문풀 말고 일반적으로

 

공백을 포함하지 않으면 scanf나 std::cin을 사용할 수 있지만

공백을 포함하면 getline()을 사용해서 입력을 받을 수 있다.

getline() 함수는 istream라이브러리에도 있고 string라이브러리에도 있는데, 아래에서 사용한건 string라이브러리의 getline()이기 때문에 #include <string>을 꼭 포함시켜줘야한다!

 

#include <iostream>
#include <string>

int main()
{
	std::string n;
	std::getline(std::cin, n);
	std::cout << n;

	return 0;
}

참고자료 : https://blog.encrypted.gg/923

 

[실전 알고리즘] 0x02강 - 기초 코드 작성 요령 II

안녕하세요, 바킹독입니다. 이전 단원에서 오지고 지리게 고통받으셨을텐데 이번에는 훨씬 쉬우니까 걱정을 덜어내시고 마음 편하게 보시면 됩니다. 저 아직 0x18살이니까 급식체 써도 되는거

blog.encrypted.gg

 

또한 std::cin으로 입력을 받은 후 std::getline()으로 입력받을 때, cin으로 입력받았을 때의 \n이 버퍼에 남아있어 getline()에 기대한 입력값이 들어가지 않고 \n이 들어간다. 그러므로 입력받기 전에 std::cin.ignore()로 버퍼를 비워주어야 한다.

#include <iostream>
#include <string>

int main()
{
	int a;
	std::cin >> a;
	std::cout << a << '\n';

	std::cin.ignore();

	std::string n;
	std::getline(std::cin, n);
	std::cout << n;

	return 0;
}

 

3. 연속된 수 하나씩 읽기

 

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

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

#include <stdio.h>

int main()
{
	int n = 0, input = 0, sum = 0;
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf_s("%1d", &input);
		sum += input;
	}

	printf("%d", sum);

	return 0;
}

 

< EOF 사용에 대해서 >

C++에서 std::cin.eof()가 있긴 하지만

백준에서 맞은 사람의 풀이를 찾아보면 다들 C언어 풀이었다...

그리고 std::cin.eof()로 풀면 왜인지 틀리기도 해서...(내가 잘 못 푼 걸 수도)

그냥 이부분은 왠만하면 C언어로 풀어야겠다

 


그 밖의 유용한 입력

https://dbstndi6316.tistory.com/33

 

[개념정리] C/C++ 여러 input방법에 대해

삼성 역량테스트를 C++로 준비하며 필요한 input의 방법들을 공부하며 정리해봤다. 1. 길이를 알고있는 숫자를 입력하고 이를 한글자씩 잘라서 input을 받아야 하는 상황 ex) 입력 : 길이 7의 숫자 1234

dbstndi6316.tistory.com

 

'CS > C++' 카테고리의 다른 글

C++로 덱 구현  (0) 2023.07.11
C++로 큐 구현  (0) 2023.07.11
C++로 스택 구현 / STL stack  (0) 2023.07.11
vector 관련 정리  (0) 2023.07.10
C++에서 배열 크기 제한  (0) 2023.07.01