我们可以在c++中使用vector来接受未知大小的用户输入,直到我们按下回车键吗?

huus2vyu  于 2022-11-19  发布在  其他
关注(0)|答案(4)|浏览(176)

我 尝试 在 c + + 中 以 向量 的 形式 接受 用户 输入 , 因为 向量 是 一 个 动态 数据 结构 , 我 希望 它 在 用户 想要 的 时间 内 接受 输入 , 当 用户 按 回车 键 时 , 它 应该 停止 接受 输入( 就 像 一 个 字符 串 ) 唯一 的 区别 是 我 想 在 一 个 整数 向量 中 做 它 ,但 我 不能 这样 做 , 让 我 知道 是否 有 可能 或 不 采取 用户 输入 的 向量 一样 , 我 描述 的 方式 。
我 已经 在 网上 搜索 了 各种 方法 , 但 我 的 代码 仍然 没有 运行 我 想要 的 方式 , 我 已经 尝试 使用 EOF 符号 打破 输入 的 循环 , 但 它 没有 停止 输入 的 循环 。 我 已经 尝试 使用 cin.ignore() 函数 , 但 它 也 需要 空格 键 计数 我 只 想 停止 输入 时 按 下 回车 键 。 下面 是 我 最近 的 代码 :

#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int> v;
char c;
for(int i=0;;i++){
    cin>>c;
    if(c=='\n'){
        break;
    }
    int x = c - '0';// typecasting char into integer.
    v.push_back(x);
}
cout<<v.size()<<endl;// just to check if it is done taking input and what is the size of vector now.
}

中 的 每 一 个

vwhgwdsa

vwhgwdsa1#

你可以使用std::getline()得到整行,然后使用std::istreamstream把整数转化为向量:

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

int main() {

    std::string input;

    std::getline( std::cin, input );

    std::istringstream is( input );

    std::vector<int> v( ( std::istream_iterator<int>( is ) ), std::istream_iterator<int>() );

    std::cout << v.size() << "\n";

    return 0;
}
rkttyhzu

rkttyhzu2#

把整行读成字符串,然后构建每个数字。类似这样:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    string s; getline(cin, s);
    int num = 0;
    vector<int> v;
    for(int i = 0; i < s.size(); ++i)
        if(s[i] == ' ')
            v.push_back(num), num = 0;
        else
            num = num*10 + (s[i]-'0');
    v.push_back(num);

    cout << v.size() << endl;

    return 0;
}
5f0d552i

5f0d552i3#

你只需要将Vector元素作为一个字符串输入,然后使用Stringstream函数按照向量索引的升序分别分配元素。

#include<bits/stdc++.h>
using namespace std;

int main()
{
    vector<int> v;
    string buffer;
    int data;
    getline(cin,buffer);
    istringstream iss(buffer);
    while(iss>>data){
        v.push_back(data);
    }
    cout<<v.size()<<" ";
    cout<<"Vector Elements"<<endl;
    for(int k=0;k<v.size();k++){
        cout<<v[k]<<" ";
    }
    return 0;
}
2uluyalo

2uluyalo4#

1.当 你 从 std : : cin 读取 时 , 它 会 从 控制 台 接收 一 整 行 , 你 的 cin 〉 〉 c 会 检索 该行 的 第 一 个 字符 , 并 将 该 字符 放入 变量 c 中 。
1.这 意味 着 if ( c = ='\ n') 几乎 毫无 意义 , 因为 该行 将 被 使用 , 并且 您 不会 看到 显 式 的 ' \ n ' 作为 第 一 个 字符 ...EVER 。

  1. c - ' 0 ' 会 将 一 个 ASCII 数字 字符 ( 例如 0123456789 ) 转换 成 您 可以 使用 的 数字 , 但 这 不是 将 字符 转换 成 整数 。 这 是 将 一 个 ASCII 数字 字符 转换 成 数值 。 类型 转换 是 将 一 个 值 的 类型 更改 为 另 一 个 类型 。
    1.我 * 认为 * 你 想 做 的 事情 像 下面 . . .
#include <iostream>
#include <vector>
#include <stdio.h>
#include <conio.h>

int main( int cArguments, const char** apszArguments ) {
    std::vector<char> vchars;
    char c;

    do {
      c = getche();
      vchars.push_back( c );
    } while( c != '\n' );

    std::cout << vchars.size() << " characters received" << std::endl;
    return 0;
}

中 的 每 一 个
请 注意 , 在 macOS 和 一些 Linux 变体 上 , getch/getche 没有 定义 , 您 需要 使用 termios 或 ncurses 函数 来 代替 。

相关问题