Main Theme 2016-09-17 02:06 采纳率: 33.3%
浏览 2184
已采纳

c++用for循环遍历vector只能输出第一个元素?

大家好,我是小白,目前刚开始学习c++。现在想将若干整数给vector,再通过for循环遍历vector,代码如下:
#include
#include
#include
using std::cin;
using std::cout;
using std::endl;
using std::vector;
int main()
{
int a;
cin >> a;
vector number;
while (cin.get()!='\n')
number.push_back(a);
for (unsigned int i = 0; i < number.size();i++)
cout << number[i]<< endl;
getchar(); system("pause");
return 0;
}
结果如下:图片说明
跟网上的for循环一样啊,难道是开始的将整数给vector出错了?请各位吊大的大神给予指点,谢谢!

  • 写回答

4条回答 默认 最新

  • Valtava 2016-09-17 06:19
    关注

    你的循环这里:

     while (cin.get()!='\n')
            number.push_back(a);
    

    a的值从未改变,因此vector里面全是a的值,也就是全是1.所以并不是只输出了第一个数字,而是输出了所有数字但是所有数字都是1.
    因为cin.get()也可以获取空格,所以你的vector长度其实比数字长度要大,推荐使用:

      while (cin >> a)
            number.push_back(a);
    

    这种情况下, Unix用Ctrl+D , windows 用Ctrl + Z + Enter结束输入。

    如果你就是要用'\n'结束输入,并且只想获得个位数的数字,也可以

     while ((a = std::cin.get()) != '\n'){
            if (!isdigit(a))
                continue;
            number.push_back(a - '0');  #cin.get()获得的是ASCII码,直接输入得到的并不是你输入的数字
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 matlab实现基于主成分变换的图像融合。
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊