首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >需要有关getline()的帮助

需要有关getline()的帮助
EN

Stack Overflow用户
提问于 2009-11-17 04:31:27
回答 7查看 18.7K关注 0票数 21

为什么在我的程序中,我要求用户输入,而我确实这样做了,这有什么原因:

int number;
string str;
int accountNumber;

cout << "Enter number:";
cin >> number;
cout << "Enter name:";
getline(cin, str);
cout << "Enter account number:";
cin >> accountNumber;

为什么在输入第一个数字之后,在我为getline(cin,str)行输入"str“之前,它会输出"Enter Name",紧接着是"Enter Account number”?谢谢!

EN

回答 7

Stack Overflow用户

发布于 2009-11-17 04:50:10

getline(cin, str);读取前面读取的数字后面的换行符,并立即返回此“行”。为了避免这种情况,您可以在读取名称之前跳过std::ws中的空格:

cout << "Enter number:";
cin >> number;
cout << "Enter name:";
ws(cin);
getline(cin, str);
...

请注意,这也会跳过换行符后面的前导空格,因此即使用户输入了空格,str也不会以空格开头。但在这种情况下,这可能是一个功能,而不是一个错误...

票数 24
EN

Stack Overflow用户

发布于 2009-11-17 04:46:41

试一试

cout << "Enter name:";
cin.ignore();
getline(cin, str);
票数 16
EN

Stack Overflow用户

发布于 2009-11-17 05:01:41

看起来你想要基于行的阅读。为此,您可能希望始终如一地使用getline,如果需要解析行中的数字,则先解析每一行,然后再读取行。它使输入读数更加一致。

这样,您就不必手动扫描每一行的末尾,以确保下一次读取操作从新行开始。

它还使得为重复输入请求添加错误处理变得更简单。

例如:

#include <string>
#include <iostream>
#include <istream>
#include <ostream>
#include <sstream>

int parse_integer(const std::string& input)
{
    std::istringstream iss(input);
    int result;
    if (!(iss >> result))
    {
        // error - throw something?
    }
    return result;
}

int main()
{
    int number;
    std::string str;
    int accountNumber;

    std::string inputline;

    std::cout << "Enter number: ";

    if (!std::getline(std::cin, inputline))
    {
        // error - throw something?
    }

    number = parse_integer(inputline);

    std::cout << "Enter name:";

    if (!std::getline(std::cin, inputline))
    {
        // error - throw something?
    }

    str = inputline;

    std::cout << "Enter account number:";

    if (!std::getline(std::cin, inputline))
    {
        // error - throw something?
    }

    accountNumber = parse_integer(inputline);

    return 0;
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1744665

复制
相关文章

相似问题

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