2017-07-29 53 views
1

我正在和我的朋友一起开展一个学校项目,我们希望我们的程序从用户那里获取整数值,并将其存储在向量中,只要用户输入一些值并在用户停止输入数字时退出输入循环。只要用户进入,如何从用户那里获取整数?

这是我的第一个样本代码的推移无限:

while(cin>>x){ 
       v.push_back(x); 
     } 

有一个条件,该号码必须大于一,但在整数值输入大于0,所以我的第二个代码,但它不工作,它也无限地继续下去。

这是我的示例代码:

while(cin>>x){ 
      if(x<0){ 
       break; 
      } 
      else{ 
       v.push_back(x); 
      } 
     } 

请给我建议的解决方案在此先感谢:)

+0

什么构成了用户的输入的结束? – Ron

+0

当用户停止输入数字并按回车键。 – BugAdder

+0

你怎么会猜测,他按下输入后不会再输入任何项目? – VTT

回答

1

对您最重要的部分是清晰地描述你想要什么。该计划必须具备某种条件才能终止。

两个想法:

  1. 用户输入由空格隔开的整数值,再压入输入

  2. 用户输入的整数,按下回车并继续。只要他按两次输入,它就会终止。

如何做到这一点:

  1. 简单使用CIN一个字符串,通过空间分隔,然后转换为整数。

  2. 使用cin与一个字符串,但如果您现在正在做,否则询问字符串是否为“”,如果不转换为整数。

+0

是的,我想做一些像第一个想法。 – BugAdder

+0

你还需要点什么?如果您搜索它,您一定会找到用于分隔的代码。 'atoi'完成转换。 – Aziuth

0

不完全确定,但我认为你的意思是像读取行然后提取整数?如果是这样,尝试这样的事情 - 没有错误检查,它会放弃从第一个非整数的一切。我没有使用例外,也没有使用for_each或lambda或任何幻想。希望能对你的入门有所帮助。

#include <iostream> 
#include <vector> 
#include <sstream> 
#include <string> 



std::vector<int> getUserInput(){ 
    std::vector<int> result; 
    std::string s; 
    std::getline(std::cin, s); 
    std::istringstream is(s); 
    while(is){ 
     int value; 
     is >> value; 
     if(is) result.push_back(value); 
    } 
    return result; 
} 

int main(int,char**){ 
    std::vector<int> userValues = getUserInput(); 
    std::cout << "User input values:\n"; 
    for(int value : userValues) std::cout << value << '\n'; 
    return 0; 
} 
0

使用Aziuth's建议和做像TopCoder公司和Codechef和其他有竞争力的编程网站网站经过一番研究,我想我找到了一个解决方案,而无需使用一个字符串。它将输入所有输入值,直到输入换行符。非常感谢每个人在这个问题上的时间和知识。

的代码是:

while(1){ 
      cin>>x; 
      v.push_back(x); 
      char ch = getchar(); 
      if(ch=='\n') 
       break; 
     } 
相关问题