javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

流-更改cin的分隔符(C ++)

我已将“ cin”重定向为从文件流中读取cin.rdbug(inF.rdbug())当我使用提取运算符时,它会一直读取直到到达空白字符。

是否可以使用其他定界符? 我通过cplusplus.com中的api,但没有找到任何东西。

trans by 2020-08-11T22:01:52Z

c ++-if(cin >> x)-为什么要使用该条件?

整个夏天,我一直在使用“加速C ++”来学习C ++,但是有一个我似乎不太了解的概念。

为什么是

int x;
if (cin >> x){}

相当于

cin >> x;
if (cin){}

通过查看代码,在我看来我们正在使用cin作为变量。 但是,我认为这是一个功能。 当x的值等于我们在键盘上输入的值时,为什么要以这种方式使用cin?

trans by 2020-02-21T23:05:56Z

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

我用C ++写了一个非常基本的程序,要求用户输入数字,然后输入字符串。 令我惊讶的是,在运行该程序时,它从未停止过询问字符串。 它只是跳过了它。 在对StackOverflow进行一些阅读之后,我发现我需要添加一行内容:

cin.ignore(256, '\n');

在获取字符串输入的行之前。 添加该功能可以解决问题并使程序正常运行。 我的问题是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 day. \n";

}
trans by 2020-02-12T07:53:06Z

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

摘自Stroustrup的TC ++ PL,第三版,第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";
    if( ss.rdstate() & std::stringstream::badbit  ) std::cout << "state: badbit\n";

    return 1;
}

我使用x86_64-w64-mingw32-g ++。exe(rubenvb-4.7.2-release)4.7.2得到的输出是:

Before: 123
After: 0
state: failbit

谢谢。

trans by 2020-01-06T10:55:21Z

如何处理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);
}

这在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 == 0);

要使其正常工作。 那太丑了。 有没有更好的方法来解决此问题? 也许我应该存储max的定义,然后再重新定义?

trans by 2020-01-01T23:42:43Z

c ++ - 如何刷新cin缓冲区?

如何在C ++中清除cin缓冲区?

trans by 2019-08-02T09:04:41Z

1 共1页