使用 cin.get() 会使代码中的输出加倍



所以我在自学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替换它时,它没有,为什么?

似乎你输入了一个换行符:当你使用回车键时,你会得到另一个字符('n'),这也是从std::cin.get()获得的。成员std::istream::get()是一个无格式的输入函数,在尝试读取任何 if 尝试读取之前不会尝试跳过空格。

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

您可以使用(std::cin >> std::ws).get()在使用前导空格get()。相反,您可以使用 std::cin >> std::noskipws 为格式化输入设置流不跳过前导空格(并使用 std::cin >> std::skipws 再次撤消此设置)。不过,一般来说,不建议不要跳过格式化输入的前导空格。

最新更新