使用cin.get()在代码中输出双倍输出

时间:2014-01-12 22:21:53

标签: c++

所以我自学C ++,我不知道这里有什么问题:

代码:

// Arrays.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
    int i = 0;
    char input = ' ';

    for(i = 1; i <= 100; ++i)
    {
        std::cout << "enter a value for element number " << i << ": " ;
        do
        {
            input = std::cin.get();
            std::cout << "recorded element in position " << i << " is " << input << "\n"; 
        } while (!input == 'q') ;
    }
}

问题:

第17行:输入std::cin.get();

它给了我:它要求输入,然后记录它并自动为我完成元素2

  

输入元素编号1的值:5 recorded element in position 1
  是5输入元素编号2的值:recorded element in position
  2是

  输入元素编号3的值:

但是当我用std::cin >> input替换它时,它没有,为什么?

1 个答案:

答案 0 :(得分:4)

您似乎输入换行符:当您使用返回键时,您将获得另一个字符('\n'),该字符也是从std::cin.get()获得的。成员std::istream::get()是一个未格式化的输入函数,在尝试读取任何内容之前不会尝试跳过空格。

另一方面,当使用格式化输入时,例如std::cin >> input,流将在尝试读取内容之前跳过所有前导空格。也就是说,也会跳过您输入的换行符。

在使用(std::cin >> std::ws).get()之前,您可以使用get()消耗前导空格。 ...反之,您可以使用std::cin >> std::noskipws设置流不会自动跳过前导空格以进行格式化输入(并使用std::cin >> std::skipws再次反转此设置)。但一般情况下,不建议不要跳过格式化输入的前导空格。