【问题标题】:How to take integers from user as long as user enters?只要用户输入,如何从用户那里获取整数?
【发布时间】:2017-07-29 16:47:20
【问题描述】:

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

这是我第一个无限运行的示例代码:

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

有一个条件是数字必须大于一,但输入的整数值大于0,所以我的第二个代码是,但它不起作用,它也无限继续。

这是我的示例代码:

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

请提前给我建议一个解决方案谢谢:)

【问题讨论】:

  • 用户输入的结尾是什么?
  • 当用户停止输入数字并按回车时。
  • 那你怎么猜到uses按回车后就不会再输入任何物品了?
  • 我想接受用户输入的所有数字。
  • "...数字必须大于 1 但输入大于 0..." - 解读它听起来像你'说只要输入的值大于零就接受输入。如果是这种情况,那么if(x&lt;0) 是错误,因为它只测试小于 的值小于零。当if (x &lt;= 0) break; 为真时,严格大于零的整数会中断。事实上,作为 while 条件的一部分来测试相反的阳性:while (std::cin &gt;&gt; x &amp;&amp; x &gt; 0) v.push_back(x);

标签: c++ loops while-loop integer cin


【解决方案1】:

对你来说最重要的部分是清楚地描述你想要什么。程序必须有一些条件才能终止。

两个想法:

  1. 用户输入以空格分隔的整数值,然后按回车键

  2. 用户输入一个整数,按回车键并继续。一旦他按了两次回车,它就终止了。

怎么做:

  1. 简单使用cin与字符串,用空格分隔,然后转换为整数。

  2. 将 cin 与字符串一起使用,否则就像现在一样,询问字符串是否为 "",如果不转换为整数。

【讨论】:

  • 是的,我想做一些类似第一个想法的事情。
  • 您还需要一些东西吗?如果您搜索它,您肯定会找到用于分隔的代码。 atoi 进行转换。
【解决方案2】:

不完全确定,但我认为您的意思是读取该行然后提取整数?如果是这样,请尝试这样的操作 - 没有错误检查,它只会丢弃第一个非整数中的所有内容。我忽略了异常,没有使用 for_each 或 lambdas 或任何花哨的东西。希望对您有所帮助。

#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;
}

【讨论】:

    【解决方案3】:

    在使用Aziuth's 建议并在 Topcoder 和 Codechef 等网站以及其他竞争性编程网站上进行一些研究后,我认为我找到了无需使用字符串的解决方案。它需要所有输入值,直到输入换行符。非常感谢大家为这个问题付出的时间和知识。

    代码是:

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

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      相关资源
      最近更新 更多