如何在 C++ 中从 stdin 获取变量输入 [复制]

How to take variable input from stdin in C++ [duplicate]

提问人:ssharma 提问时间:8/17/2017 更新时间:9/26/2020 访问量:6398

问:

我试图获取字符串和数字的输入变量数量。找到此解决方案链接

尝试过这个数字

#include<iostream>
using namespace std;
int main(){
    int np;
    while (cin>>np){
        cout << np<<endl;
    }
    return 0;
}

对于字符串:

#include<iostream>
#include<string>
using namespace std;
int main(){
    string line;
    while (getline(cin, line)){
        cout << line <<endl;
    }
    return 0;
}

但是,当我运行代码时,即使我只是按回车键,它也不会从循环中出来。如果只按回车键,循环应该终止,但这不会发生。

请提供如何实现此功能的建议。

C++ 字符串 stdin getline eof

评论

6赞 Error - Syntactical Remorse 8/17/2017
Enter 键仍为有效字符串。
0赞 ssharma 8/17/2017
那么如果没有其他剩余,如何停止接受输入?
1赞 Abstraction 8/17/2017
取决于操作系统。如果没记错的话,在 Windows 中是 ,在 Unix 中是 .Ctrl+ZCtrl+D
0赞 Error - Syntactical Remorse 8/17/2017
@Abstraction 有些也是。Ctrl C
0赞 NathanOliver 8/17/2017
如果你正在从在线法官那里读取数据,它应该为你结束流。

答:

3赞 timrau 8/17/2017 #1

你可以写

while (std::getline(std::cin, line) && !line.empty()) {
    // ...
}

仅当提取的字符串为非空时才继续循环。

评论

0赞 phetdam 9/26/2023
这样做的一个缺点是循环在空行上中断,这可能是不可取的。例如,如果您正在读取文件并且有额外的换行符,则上述循环将在检索到的第一个空换行符处中断。但是,如果一个人想阅读,直到没有更多的输入,即直到,可以用 替换。EOF!line.empty()!std::cin.eof()