You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用cin实现水平方向的用户输入?

实现水平方向的用户输入(cin版)

嘿,你的需求其实可以分成两种场景来解决,我给你拆解说明一下~

场景1:只需要用户在一行内水平输入多个值(空格分隔)

你的原始代码其实已经实现了这个功能!cin >> name >> gender >> age >> cvl_stat; 本身就会读取用户用空白(空格、回车等)分隔的输入,用户完全可以在一行里输入张三 男 28 已婚这类内容。

不过可以优化表头的输出格式,让它更整齐,需要引入<iomanip>头文件来使用对齐和宽度控制:

#include <iostream>
#include <string>
#include <iomanip> // 用于格式化输出的头文件

int main () {
    std::string name, gender, cvl_stat;
    int age;

    // 设置左对齐,每个字段占20个字符宽度,表头排版更整齐
    std::cout << std::left 
              << std::setw(20) << "Name"
              << std::setw(20) << "Gender"
              << std::setw(20) << "Age"
              << std::setw(20) << "Civil Status" << std::endl;

    // 用户在一行输入四个值,用空格分隔即可
    std::cin >> name >> gender >> age >> cvl_stat;

    // 可选:验证输入的内容
    std::cout << "\n你输入的信息是:" << std::endl;
    std::cout << std::left 
              << std::setw(20) << name
              << std::setw(20) << gender
              << std::setw(20) << age
              << std::setw(20) << cvl_stat << std::endl;

    return 0;
}

场景2:让输入光标对应到每个表头的下方(精准定位输入)

如果你的需求是让用户在每个表头的正下方输入内容(比如Name下面输入姓名,Gender下面输入性别),那cin本身做不到光标定位,需要借助操作系统的控制台API来控制光标位置:

Windows系统版本

需要引入Windows API的头文件,用SetConsoleCursorPosition函数移动光标:

#include <iostream>
#include <string>
#include <iomanip>
#include <windows.h> // Windows系统专属头文件

// 自定义函数:设置控制台光标位置
void setCursorPosition(int x, int y) {
    COORD coord;
    coord.X = x; // 列坐标,从0开始计数
    coord.Y = y; // 行坐标,从0开始计数
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

int main () {
    std::string name, gender, cvl_stat;
    int age;

    // 输出第一行的表头
    std::cout << std::left 
              << std::setw(20) << "Name"
              << std::setw(20) << "Gender"
              << std::setw(20) << "Age"
              << std::setw(20) << "Civil Status";

    // 移动光标到Name下方(第0列,第1行)
    setCursorPosition(0, 1);
    std::cin >> name;

    // 移动光标到Gender下方(第20列,第1行)
    setCursorPosition(20, 1);
    std::cin >> gender;

    // 移动光标到Age下方(第40列,第1行)
    setCursorPosition(40, 1);
    std::cin >> age;

    // 移动光标到Civil Status下方(第60列,第1行)
    setCursorPosition(60, 1);
    std::cin >> cvl_stat;

    // 验证输入内容
    std::cout << "\n\n你输入的信息是:" << std::endl;
    std::cout << std::left 
              << std::setw(20) << name
              << std::setw(20) << gender
              << std::setw(20) << age
              << std::setw(20) << cvl_stat << std::endl;

    return 0;
}

Linux/macOS系统版本

可以用ANSI转义序列来控制光标位置,不需要额外的系统头文件:

#include <iostream>
#include <string>
#include <iomanip>

// 自定义函数:设置控制台光标位置(Linux/macOS)
void setCursorPosition(int x, int y) {
    // ANSI转义序列格式:\033[行;列H,行和列从1开始计数
    std::cout << "\033[" << y << ";" << x << "H";
}

int main () {
    std::string name, gender, cvl_stat;
    int age;

    // 输出第一行的表头
    std::cout << std::left 
              << std::setw(20) << "Name"
              << std::setw(20) << "Gender"
              << std::setw(20) << "Age"
              << std::setw(20) << "Civil Status";

    // 移动光标到Name下方(第1列,第2行)
    setCursorPosition(1, 2);
    std::cin >> name;

    // 移动光标到Gender下方(第21列,第2行)
    setCursorPosition(21, 2);
    std::cin >> gender;

    // 移动光标到Age下方(第41列,第2行)
    setCursorPosition(41, 2);
    std::cin >> age;

    // 移动光标到Civil Status下方(第61列,第2行)
    setCursorPosition(61, 2);
    std::cin >> cvl_stat;

    // 验证输入内容
    std::cout << "\n\n你输入的信息是:" << std::endl;
    std::cout << std::left 
              << std::setw(20) << name
              << std::setw(20) << gender
              << std::setw(20) << age
              << std::setw(20) << cvl_stat << std::endl;

    return 0;
}

内容的提问来源于stack exchange,提问作者jeck.98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:47:30