C++如何从同一行读取n个整数并存入vector容器?
嘿,其实这里有个小误区要先澄清下:你原本写的C++ for循环逻辑,和Java里用Scanner.nextInt()的行为其实是完全一致的——两者都会自动跳过所有空白字符(不管是空格、换行还是制表符),所以不管那n个整数是跟n在同一行,还是分几行输入,都能正常读取到vector里。
但我猜你真正的需求是必须强制从同一行读取这n个整数(比如如果同一行的数字不够n个,就判定输入无效),对吧?那确实需要调整代码,因为默认的std::cin不会区分行的边界。
给你两种常用的解决方案:
方案一:n和目标整数在同一行
如果你的输入格式是n 数字1 数字2 ... 数字n这样整行输入,那可以先读取整行内容,再用字符串流来解析:
#include <iostream> #include <vector> #include <sstream> #include <string> int main() { std::string input_line; // 先读取完整的一行输入 std::getline(std::cin, input_line); // 把整行内容转换成一个输入流,方便逐个数读取 std::istringstream line_stream(input_line); int n; line_stream >> n; // 从行里读出n std::vector<int> vec; int num; for (int i = 0; i < n; ++i) { if (line_stream >> num) { vec.push_back(num); } else { // 同一行里的数字不够n个,报错处理 std::cerr << "输入错误:该行的数字数量不足n个!" << std::endl; return 1; } } // 测试输出(可选) for (int x : vec) { std::cout << x << " "; } std::cout << std::endl; return 0; }
方案二:n单独一行,目标整数在下一行
如果你的输入格式是先单独输入n换行,再输入一行包含n个整数,那需要先处理cin >> n留下的换行符,再读取目标行:
#include <iostream> #include <vector> #include <sstream> #include <string> #include <limits> // 用于获取输入流的最大长度 int main() { int n; std::cin >> n; // 关键步骤:跳过n后面的换行符(因为cin读整数后会把换行留在缓冲区里) std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::string nums_line; std::getline(std::cin, nums_line); std::istringstream line_stream(nums_line); std::vector<int> vec; int num; for (int i = 0; i < n; ++i) { if (line_stream >> num) { vec.push_back(num); } else { std::cerr << "输入错误:该行的数字数量不足n个!" << std::endl; return 1; } } // 测试输出(可选) for (int x : vec) { std::cout << x << " "; } std::cout << std::endl; return 0; }
这两种方案都能严格保证你读取的n个整数来自同一行,满足你的需求~
内容的提问来源于stack exchange,提问作者Mave
相关产品推荐
相关产品推荐

