을 현재의 예를 들어 당신이 std::string
대신 std::array<char, 10>
사용해야합니다. 당신은 여전히 배열을 읽으려면 다음과 같이 그러나, 당신은 그것을 할 수 :
이
#include <iostream>
#include <array>
int main() {
std::array<int, 10> arr;
for(int temp, i = 0; i < arr.size() && std::cin >> temp; ++i) {
arr[i] = temp;
}
for(auto&& i : arr) {
std::cout << i << ' ';
}
}
출력은 : 기본적인 아이디어는 단지 배열 크기까지 루프를 통해 다음에 삽입
$ ./a.out
10 11 12 13 14 15 16 17 18 19
10 11 12 13 14 15 16 17 18 19
입니다
배열은
operator[]
을 사용합니다. 삽입 프로세스에서 오류를 catch하려면 루프 조건에
std::cin >> temp
을 유지하십시오. 이 작업을 수행하는 표준 라이브러리에는 내장 함수가 없습니다. 자주 이렇게 자신을 발견 할 경우
, 당신은 당신의 자신의 함수로 이동할 수 : 그 정의되지 않은 동작 이후
#include <iostream>
#include <array>
template<typename T, size_t N>
std::istream& input_array(std::istream& in, std::array<T, N>& arr) {
unsigned i = 0u;
for(T temp; i < arr.size() && in >> temp; ++i) {
arr[i] = std::move(temp);
}
return in;
}
int main() {
std::array<int, 10> arr;
input_array(std::cin, arr);
}
당신은 std
네임 스페이스 내에서 것들에 대한 operator>>
에 과부하가 걸리지한다.
당신은 다음과 같이 기능을 수정할 수 있습니다 임시을 피하려면 :
template<typename T, size_t N>
std::istream& input_array(std::istream& in, std::array<T, N>& arr) {
for(unsigned i = 0u; i < arr.size() && in >> arr[i]; ++i) {
// empty body
}
return in;
}
10 자 이상 입력하면 어떻게 될까요? –
은 잘라내어 무시하십시오. 나중에 다른 입력을 허용하도록 화면 버퍼를 지워야합니다. – dmaelect