과 같아야합니다
// change int to your type
int val;
std::vector<int> vec;
while(std::cin >> val) {
if(val == 0) break;
vec.push_back(val);
}
이유 : 리턴 절을 표명하는 것은 루프가 종료됩니다.
std::vector
의 사용은 임의의 크기 조건을 보장합니다.
업데이트 @ nonsensickle의 건설적인 발언 후 :가
다음 코드 조각은 또한 은 0 입력 과정을 조건 종료 보장 : 과잉 있지만,
// change int to your type
int val;
std::vector<int> vec;
do {
if(std::cin >> val) {
if(val == 0) break;
vec.push_back(val);
} else { // fix broken input stream in case of bad input
std::cin.clear();
std::cin.ignore(1,'\n');
}
} while(true);
하고보다 정교한 방법을하지만, 도대체 :) 템플릿 및 유형 특성 :
template <typename T>
struct zero_traits
{
static T getzero() { return T(0); }
};
template <>
struct zero_traits<std::string>
{
static std::string getzero() { return "0"; }
};
template <>
struct zero_traits<char>
{
static char getzero() { return '0'; }
};
template <typename T>
std::vector<T> read_values()
{
T val;
std::vector<T> vec;
do {
if(std::cin >> val) {
if(val == zero_traits<T>::getzero()) break;
vec.push_back(val);
} else {
std::cin.clear();
std::cin.ignore(1,'\n');
}
} while(true);
return vec;
}
int main()
{
// change int to your type
std::vector<int> vec = read_values<int>();
for(auto i : vec) std::cout << i << std::endl;
}
숫자를 입력하면 – redFIVE
이 다시 표시되므로 {...} 동안 다시 읽으십시오. 반환 함수를 종료합니다. 그런 식으로 루프를 빠져 나가려면 아마도 깨기를 원할 것입니다. – duncan
다음 블로그 게시물 http://ericlippert.com/2014/03/05/how-to-debug-small-programs/에서 설명하는 ** 고무 도킹 기술에 대해 읽어 보시기 바랍니다. 왜냐하면 당신은 ** 그것을 다시 라인 아래로 사용해야 할 것입니다. – nonsensickle