C++ 输入一行未知个数的整数

本文介绍了一种使用C++从标准输入读取未知数量整数的方法,并通过一个示例展示了如何找到这些整数中的第K个最大值。示例代码包括了输入整数序列、存储数据到向量以及实现寻找第K个最大值的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近笔试的时候,编程题遇到这样要求的输入,需要输入一行整数,个数未知,然后整数之间用空格间隔,如下所示:

11 22 333 45 62

代码如下所示:

int main()
{
    vector<int> inputs;
    int n = 0, k=0;
    int i;  
    cin >> i;
    inputs.push_back(i);
    while (cin.get() != '\n')   { 
        cin >> i; 
        inputs.push_back(i);
    }   

    system("pause");
    return 0;
}

更完整代码如下所示,编程题目是要求找到给定整数序列中第K个大的数字:

#include<iostream>
#include<vector>

using namespace std;
int find_k_max_nums(vector<int> array, int k){
    int res = 0;
    sort(array.begin(), array.end(), greater<int>());
    res = array[k - 1];
    return res;
}

int main()
{
    vector<int> inputs;
    int n = 0, k=0;
    int i;  
    cin >> i;
    inputs.push_back(i);
    while (cin.get() != '\n')   { 
        cin >> i; 
        inputs.push_back(i);
    }   
    cin >> k;

    int res = find_k_max_nums(inputs, k);
    printf("%d\n", res);


    system("pause");
    return 0;
}

结果如下:

这里写图片描述

### C++ 中同时输入多个值的方法 在 C++ 编程语言中,可以使用 `std::cin` 来实现一次性的多值输入功能。以下是几种常见的方法来处理这种情况: #### 使用单次 `cin` 输入多个变量 可以直接通过链式操作符的方式,在同一行代码中完成多个变量的同时输入。例如: ```cpp #include <iostream> using namespace std; int main() { int a; char c; double d; cout << "请输入一个整数、字符和浮点数:" << endl; cin >> a >> c >> d; // 同时读取三个不同类型的值 cout << "整数值: " << a << endl; cout << "字符值: " << c << endl; cout << "浮点数值: " << d << endl; } ``` 这种方法适用于已知固定数量的输入项,并且这些输入项之间由空白分隔[^4]。 #### 利用循环结构批量接收未知数目数据 当面对不确定具体有多少组数据待录入的情况,则可采用循环机制配合条件判断语句来进行动态收集。比如下面这个例子展示了如何持续接受直到遇到非法输入为止: ```cpp #include <iostream> #include <vector> // 引入容器库以便存储大量数据 using namespace std; int main(){ vector<int> numbers; int inputNumber; cout<<"不断输入整数(结束请输入非数字):"<<endl; while(cin>>inputNumber){ // 只要能成功解析成整型就继续执行内部逻辑 numbers.push_back(inputNumber); } if(!cin.eof()){ // 如果不是因为文件流终止而退出则清空错误状态并跳过剩余未识别部分 cin.clear(); string dummy; getline(cin,dummy); // 清除缓冲区中的残留内容 } cout<<"\n您刚才输入的所有整数为:"<<endl; for(auto elem :numbers){ cout<<elem<<" "; } } ``` 上述程序片段能够有效地捕获一系列连续键入的整数值直至检测到无法转换的数据类型停止[^2][^5]。 #### 处理特殊情况下的潜在问题及其解决方案 需要注意的是,在某些特殊场景下可能会遭遇意想不到的行为模式或者异常状况的发生。例如如果先请求了一个字符串然后再紧跟其他基本数据类型的项目时如果没有妥善管理好中间可能存在的多余回车或其他不可见字符的话很可能会引发后续读取失败等问题。对此我们可以通过调用成员函数ignore()手动丢弃多余的字符从而达到预期效果: ```cpp #include <iostream> using namespace std; int main() { string name; int age; cout << "Enter your full name followed by space and then enter your age:\n"; getline(cin, name); // 获取整个名字包括其中间的名字 cin.ignore(); // 忽略掉上一步留下来的换行符或者其他干扰因素 cin >> age; // 接着正常获取年龄信息 cout << "\nName entered was '" << name << "'\nAge entered was " << age; } ``` 以上就是关于C++环境下多种方式达成一次性输入多个值得介绍[^3]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

spearhead_cai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值