在C++中从标准输入读取数据

74

我正在尝试使用C++从标准输入读取数据,使用了以下代码:

#include <iostream>
using namespace std;

int main() {
    while(cin) {
        getline(cin, input_line);
        cout << input_line << endl;
    };
    return 0;
}

当我编译时,会出现以下错误..

[root@proxy-001 krisdigitx]# g++ -o capture -O3 capture.cpp
capture.cpp: In function âint main()â:
capture.cpp:6: error: âinput_lineâ was not declared in this scope

有什么想法是缺失的吗?

2个回答

119

你没有定义变量input_line

请添加以下代码:

string input_line;

并且添加这个 include。

#include <string>

以下是完整的示例。我还删除了while循环后面的分号,你应该将getline放在while循环内部以正确检测流的结束。

#include <iostream>
#include <string>

int main() {
    for (std::string line; std::getline(std::cin, line);) {
        std::cout << line << std::endl;
    }
    return 0;
}

26
@KerrekSB说:“return 0”可能会被隐含,但这是从C语言继承下来的一个令人讨厌的问题。更好的做法是明确地写出return 0 - Martin Bonner supports Monica
23
不同意。主函数中的隐式返回0是可以的。 - Andrew Tomazos

4
//declaration:    
    int i2;
    double d2;
    string s2;
//reading by keyboard

    cin >> i2;
    cin >> d2;
    cin.get();
    getline(cin, s2);
//printing:
    cout << i+i2 << endl;    
    cout<< std::fixed <<std::setprecision(1)<< d + d2 << endl;
    cout << s << s2;

您可以运行此代码:

#include <iostream>
#include <iomanip>
#include <limits>

using namespace std;

int main() {
    int i = 4;
    double d = 4.0;
    string s = "hi ";
    

    int i2;
    double d2;
    string s2;
    cin >> i2;
    cin >> d2;
    cin.get();
    getline(cin, s2);
    cout << i+i2 << endl;
    cout<< std::fixed <<std::setprecision(1)<< d + d2 << endl;
    cout << s << s2;

    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接