prayforvictory 2015-11-10 04:10 采纳率: 100%
浏览 1815
已采纳

c++初学者求助:c++vector 初始化出现问题

#include
#include
using namespace std;
int main()
{
vector v1;
vector v2;
cout<<"请输入v1的内容,整数"< int i=0,j=0;
while(cin>>i)
v1.push_back(i);
cout<<"请输入v2的内容,整数"< while(cin>>j)
v2.push_back(j);

    return 0;

}

程序只执行到cout<<"请输入v2的内容,整数"<<endl;
第二个while并没有执行,是为什么?

  • 写回答

5条回答 默认 最新

  • yhl_leo 博客专家认证 2015-11-10 05:30
    关注
         vector<int> v1;
        vector<int> v2;
        cout<<"请输入v1的内容,整数"<<endl;
        int i=0,j=0;
    
        bool succeed = true;
        while(succeed)
        {
            succeed = cin>>i;
            cout << "succeed " << succeed << endl;
            v1.push_back(i);
        }
    
        cout<<"请输入v2的内容,整数"<<endl;
        bool succeed2 = cin>>j;
        cout << "succeed2 " << succeed2 << endl;
        while(cin>>j)
            v2.push_back(j);
    

    强调两点:

    • 1 程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据;
    • 2 正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入。代码修改成上面的样子后可以看出,一旦cin>>状态由good转为bad,则不管后面的判断状态cin>>j始终为false

    运行截图:
    Results

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 普通网友 2015-11-10 04:30
    关注

    第一个while循环终止条件是什么,你知道吗? 说白了也就是while(cin >> i)这个循环你没有真正的去理解,如果你的i一直都是整形或者说是
    编译器通过隐式转换成整形的情况,这样的话(也就是说没有非法输入的时候)这个循环是不会停止的...所以要看你的输入是否正确...

    评论
  • yhl_leo 博客专家认证 2015-11-10 05:30
    关注
         vector<int> v1;
        vector<int> v2;
        cout<<"请输入v1的内容,整数"<<endl;
        int i=0,j=0;
    
        bool succeed = true;
        while(succeed)
        {
            succeed = cin>>i;
            cout << "succeed " << succeed << endl;
            v1.push_back(i);
        }
    
        cout<<"请输入v2的内容,整数"<<endl;
        bool succeed2 = cin>>j;
        cout << "succeed2 " << succeed2 << endl;
        while(cin>>j)
            v2.push_back(j);
    

    强调两点:

    • 1 程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据;
    • 2 正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入。代码修改成上面的样子后可以看出,一旦cin>>状态由good转为bad,则不管后面的判断状态cin>>j始终为false

    运行截图:
    Results

    评论
  • java-flash 2015-11-10 05:38
    关注

    第一个while循环未退出,程序就不能往下执行了,可以通过i来结束C++循环语句

    评论
  • yhl_leo 博客专家认证 2015-11-10 11:14
    关注
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 (SOS)安卓集成一个插件
  • ¥15 最小生成树问题 Prim算法和Kruskal算法
  • ¥25 医院住院病人呼叫器设计
  • ¥15 不想和现在的团队合作了,怎么避免他们对程序动手脚
  • ¥30 c++类和数组实验代码
  • ¥20 C语言字符串不区分大小写字典排序相关问题
  • ¥15 关于#python#的问题:我希望通过逆向技术爬取1688搜索页下滑加载的数据
  • ¥15 关于Linux的终端里,模拟实现一个带口令保护的屏保程序遇到的输入输出的问题!(语言-c语言)
  • ¥30 请问,这个嵌入式Linux系统怎么分析,crc检验区域在哪
  • ¥15 二分类改为多分类问题