首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序跳过getline

程序跳过getline
EN

Stack Overflow用户
提问于 2021-10-06 06:19:44
回答 1查看 39关注 0票数 1

输入将被跳过。这是一个如此简单的程序,但我不明白为什么它会跳过这一步。

代码语言:javascript
复制
#include <iostream>
#include <string>
using namespace std;
int main()
{
    int repeat;
    string message;

    cout<<"Computer Punishment"<<endl;
    cout<<"-----------------------"<<endl;
    cout<<"Repititions? ";
    cin>>repeat;
    cout<<"Message? ";
    getline(cin, message);
    for(int i=0;i<repeat;i++)
    {
        cout<<message<<endl;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-10-06 06:28:16

此问题是由于cingetline行为造成的。

当你读取第一个数字时,输入流看起来是这样的:

代码语言:javascript
复制
before cin:
  2\n
  ^

after cin:
  2\n
    ^

cin只读取所需的数字,然后插入符号指向\n符号。

默认情况下,getline从当前插入符号位置读取到\n,在本例中,它读取一个空字符串。所以你需要在getline之前阅读这个\n (这只是一个解决方案),然后你的代码就可以工作了:

代码语言:javascript
复制
#include <iostream>
#include <string>
using namespace std;
int main()
{
    int repeat;
    string message;

    cout<<"Computer Punishment"<<endl;
    cout<<"-----------------------"<<endl;
    cout<<"Repititions? ";
    cin>>repeat;
    cout<<"Message? ";
    
    cin.get() // get '\n' symbol
    
    getline(cin, message);
    for(int i=0;i<repeat;i++)
    {
        cout<<message<<endl;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69460731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档