小编Jos*_*_mr的帖子

为什么我可以在不使用std :: getline的情况下调用getline?

我正在阅读C++ Primer一书并​​尝试所有代码示例.我对这个很感兴趣:

#include <iostream>
#include <string>

using std::string;
using std::cin;
using std::cout;
using std::endl;

int main()
{
    string line;
    while (getline(cin,line))
        cout << line << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在编译这段代码之前,我猜测编译会失败,因为我没有使用

while (std::getline(cin,line))
Run Code Online (Sandbox Code Playgroud)

为什么getline在全局命名空间中?据我所知,这应该只在我使用时发生

namespace std;
Run Code Online (Sandbox Code Playgroud)

要么

using std::getline;
Run Code Online (Sandbox Code Playgroud)

我在Linux Mint Debian Edition上使用g ++版本4.8.2.

c++ namespaces getline

9
推荐指数
3
解决办法
1614
查看次数

(cin >> buf &&!buf.empty())中的第二个条件是多余的吗?

我正在阅读C++入门书,并对以下代码示例感到好奇:

string buf;
while (cin >> buf && !buf.empty()) {
    if (buf[0] != '_')
       continue; // get another input
       //the input starts with an underscore; process buf . . .
}
Run Code Online (Sandbox Code Playgroud)

循环应忽略不以下划线开头的单词,并对以下划线开头的单词执行某些操作.

我的问题是关于这个条件

(cin >> buf && !buf.empty())
Run Code Online (Sandbox Code Playgroud)

我会说条件(!buf.empty())在(cin >> buf)为真时总是为真,所以我没有看到添加它的意义.有没有第二个条件不冗余的情况?

关于类似构造的堆栈溢出有一个先前的问题(是否可以从cin读取空字符串并且仍然从cin.good()得到真实?)其答案根本就是否定(第二个条件多余的).

如果这是正确的,为什么它在书上?这只是一个错误?还是有一些特殊的情况,双重条件是否有意义?

c++ cin

6
推荐指数
1
解决办法
80
查看次数

将std :: cin直接重定向到std :: cout

关于标准io的练习要求我:

读取标准输入的输入并将其写入标准输出.

可能的解决方案是:

#include<iostream>
#include<string>

using std::cin; using std::cout;
using std::string;

int main()
{
    string word;
    while (cin >> word)
        cout << word;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,字符串充当缓冲区.如果有人试图通过执行以下操作来摆脱缓冲区:

#include<iostream>
using std::cin; using std::cout;

int main()
{
    while (cout << cin)
        ;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果非常不同.当我运行这段代码时,我得到一个无休止的流

0x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d300x600d30

在终端上.

为什么会这样?为什么这些程序的行为有所不同?

c++ io

2
推荐指数
1
解决办法
537
查看次数

标签 统计

c++ ×3

cin ×1

getline ×1

io ×1

namespaces ×1