C++中使用auto范围循环实现逐次输入数字的问题如何解决?
问题根因
C++语法规定,循环、分支等控制语句后没有显式书写花括号时,只有紧接的第一条语句会被纳入对应控制块执行。你当前的代码中,for循环没有添加花括号,仅std::cout打印语句属于循环体,输入、存入数组的两行代码会在循环全部执行完毕后才运行一次,因此会出现先打印全部三类商品的输入提示,再仅支持一次输入的问题。
修复后的完整代码
#include <iostream> #include <string> #include <vector> int main(){ std::vector<std::string> products = {"burgers","fries","sodas"}; std::vector<int> numbers = {}; int a; // 给for循环添加花括号,将输入、存值逻辑都纳入循环体 // 此处将auto n改为const auto&是可选优化,避免字符串不必要拷贝,直接写auto n也可正常运行 for (const auto& n : products) { std::cout << "Enter number of " << n << ": \n"; std::cin >> a; numbers.push_back(a); } return 0; }
修改后代码会每打印一条商品输入提示,就等待用户输入对应数值并存入numbers数组,完全匹配预期的交互效果。
内容的提问来源于stack exchange,提问作者hmm
相关产品推荐
相关产品推荐

