2011-05-04 99 views
18

我试图存储用户通过控制台输入的输入。所以我需要包含“输入”和任何空格。阅读全文输入

cin在第一个空格后停止输入。

有没有办法读完整行,直到CTRL + Z被按下,或什么?

+0

可能重复使用getline函数。请看看http://stackoverflow.com/questions/2765462/how-to-cin-space-in-c – mkaes 2011-05-04 11:52:46

+0

我没有找到这个职位,而搜索。如果我这样做,我会张贴另一个^^对不起,我会尝试更深入下一次 – Katia 2011-05-04 12:03:26

回答

38

有没有像readLines的方式,直到CTRL + Z被按下或什么?

是的,正是这样,使用免费的std::getline功能(同名的istream方法!):

string line; 

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

这将读取线(包括空格,但没有终止换行符),直到达到输入结束或者cin发出错误信号。

+0

,所以如果输入像5行以CTRL + Z结束没有maree什么行包含,它会去行变量? ? 当我在前面尝试时,输入到一个字符串变量不会存储后的空间.. 是因为我使用cin而不是getline? – Katia 2011-05-04 11:56:54

+1

@katia只有'getline'读取整行。如果你通过'cin >> line'输入一个字符串,那么它只读到第一个空格。 – 2011-05-04 11:58:56

+0

我现在得到它,thx一百万:) – Katia 2011-05-04 12:01:57

3
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
    string s; 
    while(getline(cin, s)) { 
     // do something with s 
    } 
} 
0

对于我的程序,我写了下面一段代码,它读取输入的每个字符,直到按下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。你必须亲自看看。

+0

你正在设置你的自己的缓冲区溢出,这是不安全的 – thecoshman 2012-10-11 10:51:12

-1
#include <string> 
#include <iostream> 

int main() 
{ 

    std::cout << "enter your name: "; 

    std::string name; 

    std::getline(std::cin, name); 

    return 0; 

} 
+1

欢迎来到堆栈溢出!虽然我们感谢您的回答,但如果它能提供其他答案的附加价值会更好。在这种情况下,您的答案不会提供额外的价值,因为另一个用户已经发布了该解决方案。如果以前的答案对你有帮助,你应该投票,而不是重复相同的信息。 – 2017-08-01 16:54:18

0

您可以在C++

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