标签: cin

105
推荐指数
7
解决办法
28万
查看次数

如何处理windows.h中的max宏与std中的max冲突?

所以我试图从cin获得有效的整数输入,并使用了这个问题的答案.

它建议:

#include <Windows.h> // includes WinDef.h which defines min() max()
#include <iostream>
using std::cin;
using std::cout;

void Foo()
{
    int delay = 0;
    do
    {
        if(cin.fail())
        {
            cin.clear();
            cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
        cout << "Enter number of seconds between submissions: ";
    } while(!(cin >> delay) || delay == 0);
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个关于Windows的错误,说max宏没有采用那么多的参数.这意味着我必须这样做

do
{
    if(cin.fail())
    {
        cin.clear();
#undef max
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    cout << "Enter number of seconds between submissions: ";
} while(!(cin >> delay) || delay …
Run Code Online (Sandbox Code Playgroud)

c++ iostream cin

54
推荐指数
5
解决办法
2万
查看次数

为什么stringstream >>在失败时改变目标值?

来自Stroustrup的TC++ PL,第3版,第21.3.3节:

如果我们尝试读入变量v并且操作失败,则v的值应该保持不变(如果v是istream或ostream成员函数处理的类型之一,则它不会改变).

以下示例似乎与上述引用相矛盾.基于上面的引用,我期待v的值保持不变 - 但它会变为零.对这种明显的矛盾行为有什么解释?

#include <iostream>
#include <sstream>

int main( )
{
    std::stringstream  ss;

    ss  << "The quick brown fox.";

    int  v = 123;

    std::cout << "Before: " << v << "\n";

    if( ss >> v )
    {
        std::cout << "Strange -- was successful at reading a word into an int!\n";
    }

    std::cout << "After: " << v << "\n";

    if( ss.rdstate() & std::stringstream::eofbit  ) std::cout << "state: eofbit\n";
    if( ss.rdstate() & std::stringstream::failbit ) std::cout << "state: failbit\n"; …
Run Code Online (Sandbox Code Playgroud)

c++ state stringstream cin

53
推荐指数
1
解决办法
2598
查看次数

我何时以及为什么需要在C++中使用cin.ignore()?

我用C++编写了一个非常基本的程序,它要求用户输入一个数字,然后输入一个字符串.令我惊讶的是,在运行程序时,它永远不会停止询问字符串.它只是跳过了它.在对StackOverflow进行一些阅读后,我发现我需要添加一行说:

cin.ignore(256, '\n');
Run Code Online (Sandbox Code Playgroud)

在获取字符串输入的行之前.添加修复问题并使程序正常工作.我的问题是为什么C++需要这一cin.ignore()行,我如何预测何时需要使用cin.ignore()

这是我写的程序:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    double num;
    string mystr;

    cout << "Please enter a number: " << "\n";
    cin >> num;
    cout << "Your number is: " << num << "\n";
    cin.ignore(256, '\n'); // Why do I need this line?
    cout << "Please enter your name: \n";
    getline (cin, mystr);
    cout << "So your name is " << mystr << "?\n";
    cout << "Have a nice …
Run Code Online (Sandbox Code Playgroud)

c++ ignore cin getline

51
推荐指数
4
解决办法
18万
查看次数

if(cin >> x) - 你为什么要使用这个条件?

我在夏天一直使用"Accelerated C++"来学习C++,并且有一个我似乎无法理解的概念.

为什么是

int x;
if (cin >> x){}
Run Code Online (Sandbox Code Playgroud)

相当于

cin >> x;
if (cin){}
Run Code Online (Sandbox Code Playgroud)

通过查看代码,在我看来,我们使用cin作为变量.但是,我认为这是一个功能.为什么我们可以以这种方式使用cin,因为它是x,它具有我们输入键盘的任何值?

c++ variables if-statement cin

48
推荐指数
6
解决办法
4万
查看次数

更改cin的分隔符(c ++)

我已经重定向"cin"来从文件流中读取cin.rdbug(inF.rdbug()) 当我使用提取操作符时,它会读取它直到它到达空格字符.

是否可以使用另一个分隔符?我在cplusplus.com上浏览了api,但没有找到任何东西.

c++ whitespace stream cin delimiter

42
推荐指数
4
解决办法
3万
查看次数

cin和getline跳过输入

早些时候我发布了一个关于cin跳过输入的问题,我得到了刷新和使用的结果istringstream,但现在我尝试了所有可能的解决方案,但它们都没有工作.

这是我的代码:

void createNewCustomer () {
    string name, address;

    cout << "Creating a new customer..." << endl;
    cout << "Enter the customer's name: "; getline(cin, name);
    cout << "Enter the customer's address: "; getline(cin, address);

    Customer c(name, address, 0);
    CustomerDB::addCustomer(c);

    cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

但我仍然得到同样的东西,跳过输入,当它确实需要输入时,它需要它们并且名称中的存储空白,并且在地址中它采用我在名称中写的但是从第二个字母到结尾

我的代码出了什么问题?

我尝试了cin.ignore(),cin.get()cin.clear()所有的人一起,独自一人,没有一次成功

编辑:

main.cpp中的main方法mainMenu()只调用

void mainMenu () {
    char choice;

    do {
        system("cls");
        mainMenuDisplay();
        cin >> choice;
        system("cls");

        switch (choice) {
            case '1': …
Run Code Online (Sandbox Code Playgroud)

c++ input cin getline

42
推荐指数
2
解决办法
11万
查看次数

在cin之后使用getline(cin,s)

我需要以下程序来获取整行用户输入并将其放入字符串名称:

cout << "Enter the number: ";
int number;
cin >> number;

cout << "Enter names: ";
string names;

getline(cin, names);
Run Code Online (Sandbox Code Playgroud)

然而,使用cin >> number命令之前的getline()命令(我猜这是问题),它不允许我输入名称.为什么?

我听说过一个关于cin.clear()命令的事情,但我不知道这是如何工作的,或者为什么这甚至是必要的.

c++ cin getline

39
推荐指数
6
解决办法
6万
查看次数

按Enter继续

这不起作用:

string temp;
cout << "Press Enter to Continue";
cin >> temp;
Run Code Online (Sandbox Code Playgroud)

c++ string newline cin

35
推荐指数
3
解决办法
7万
查看次数

std :: cin如何同时返回bool和它本身?

我正在读一本关于C++的书,它说如果我使用>>运算符,它会返回运算符左侧的对象,所以在这个例子中

std::cin >> value1;
Run Code Online (Sandbox Code Playgroud)

代码返回std::cin.

但是,如果我这样做

while(std::cin >> value1)
Run Code Online (Sandbox Code Playgroud)

我的代码将处于循环中,直到出现std::cin错误,因此必须表示运算符boolstd::cin未失败时返回true,在失败时返回false std::cin.

哪一个是它?

c++ cin

32
推荐指数
2
解决办法
3079
查看次数