如何使用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
相关产品推荐
相关产品推荐

