C ++ - 重复std :: getline()作为用户整数输入?

时间:2017-07-25 15:31:23

标签: c++ console-application

如何像这个方法一样重复std :: getline()作为用户数输入:

  std::string num;
  std::cout << "How many subjects you want to sum: ";
  std::getline (std::cin,num);

然后输入用户编号并多次重复std :: getline()作为输入,将用户在第一个问题后输入的所有主题标记相加。

1 个答案:

答案 0 :(得分:1)

不希望使用std::getline输入数字。

您需要一个标准模式:

int quantity = 0;
std::cout << "Enter quantity of subjects to sum: ";
std::cin >> quantity;
int sum = 0;
for (int i = 0; i < quantity; ++i)
{
    int value;
    std::cin >> value;
    sum += value;
}

常见的数据输入格式是将数量指定为一行中的第一个数字。

数据将跟随后续行,通常每行一个数字。

operator>>将跳过空格(包括换行符)。

编辑1:使用getline
如果必须使用getline,请记住它只读取字符串(字符)。如果您想要数字,则必须从文本表示转换为内部表示。

int quantity;
std::string text_line;
std::cout << "Enter quantity to sum: ";
std::getline(std::cin, text_line);
int sum = 0;
// Extract number from the text
{
    std::istringstream text_stream(text_line);
    text_stream >> quantity;
}
for (int i = 0; i < quantity; ++quantity)
{
    std::getline(std::cin, text_line);
    std::istringstream text_stream(text_line);
    int value = 0;
    text_stream >> value;
    sum += value;
}

注意行数的差异。

另外,请注意std::istringstream的用法。看起来在第一个示例中使用std::cin

还有其他技术可以将数字的文本表示转换为内部表示。这些留待读者研究。