【问题标题】:Reading a full line of input读取整行输入
【发布时间】:2011-08-18 11:30:55
【问题描述】:

我正在尝试存储用户通过控制台输入的输入。所以我需要包括“输入”和任何空白。

但是cin 在第一个空格之后停止给我输入。

有没有办法在按下 CTRL+Z 之前读取整行?

【问题讨论】:

标签: c++


【解决方案1】:

可以在c++中使用getline函数

#include<iostream>
using namespace std;
int main()
{
    char msg[100];
    cin.getline(msg,100);
    return 0;
}

【讨论】:

    【解决方案2】:
    #include <string>
    #include <iostream>
    
    int main()
    {
    
        std::cout << "enter your name: ";
    
        std::string name;
    
        std::getline(std::cin, name);
    
        return 0;
    
    }
    

    【讨论】:

    • 欢迎来到 Stack Overflow!尽管我们感谢您的回答,但如果它在其他答案之上提供额外的价值会更好。在这种情况下,您的答案不会提供额外的价值,因为另一个用户已经发布了该解决方案。如果之前的答案对您有帮助,您应该投票而不是重复相同的信息。
    【解决方案3】:

    在按下 CTRL+Z 之前有没有类似 readLines 的方法??

    是的,就是这样,使用免费的std::getline函数(不是istream的同名方法!):

    string line;
    
    while (getline(cin, line)) {
        // do something with the line
    }
    

    这将从输入中读取行(包括空格,但不结束换行符),直到到达输入结尾或cin 发出错误信号。

    【讨论】:

    • 所以如果输入是 5 行以 CTRL+Z 结尾,无论该行包含什么,它都会转到行变量?当我之前尝试使用时,字符串变量的输入不会存储在空格之后..是因为我使用的是 cin 而不是 getline 吗??
    • @katia 只有getline 读取整行。如果您通过cin &gt;&gt; line 输入字符串,那么它只会读取到第一个空格。
    【解决方案4】:

    对于我的程序,我编写了以下代码,它读取输入的每个字符,直到按下 ctrl+x。代码如下:

    char a;
    string b;
    while (a != 24)
    {
    cin.get(a);
    b=b+a;
    }
    cout << b;
    

    对于 Ctrl+z,输入:

    char a;
    string b;
    while (a != 26)
    {
    cin.get(a);
    b=b+a;
    }
    cout << b;
    

    我无法确认 ctr+z 解决方案是否有效,因为我在 UNIX 机器上,并且 ctrl+z 会终止程序。但是,它可能适用于 Windows,也可能不适用于 Windows;你必须自己去看看。

    【讨论】:

    • 你正在设置自己的缓冲区溢出,这根本不安全
    【解决方案5】:
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() 
        string s;
        while( getline( cin, s ) ) {
           // do something with s
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 2020-07-27
      • 2014-01-07
      • 2022-09-28
      相关资源
      最近更新 更多