2012-08-06 90 views
0

我有例如下面的一段代码:字符串输入复制的文本

string str; 
int i; 
cout<<"input:"; 
cin>>str; 
cout<<"integer:"; 
cin>>i; 

其实没有什么不对的代码,但如果我粘贴在“输入”一些文本进入命令提示符,它会自动将一些复制的文本填充到“整数”中。我该如何解决这个问题?

编辑:我可以键入文本只要我想,但是当我复制文本它出错了。我不知道为什么。

+0

您的复制文本是否包含行返回? – ereOn 2012-08-06 10:09:54

+0

你可以给你提示你在提示符下“粘贴”的样本吗?请使用正确和不正确的输入会话编辑您的问题。 – 2012-08-06 10:10:22

+0

@ ereOn:是的它的确如此 – Badshah 2012-08-06 10:13:40

回答

3

我想,你的文本包含空格。所以,std::cin不会在这里工作。改为使用std::getline

std::string str; 
std::getline(std::cin, str); 

还有第三个参数std::getline - 分隔符。默认情况下,它是新的一行字符。


如果您的文本确实包含新的行字符,则此操作无效。你有两个选择:

  • 找到独特的字符,可以用来作为分隔符和(使用std::getline)从用户输入(std::cin)的线把它作为std::getline
  • 读取行的第三个参数,寻找一些特殊的字符串,它会告诉你的程序文本结束的地方。没有其他办法可以知道埃格尔在哪里开始(除非文本是固定大小,但我怀疑)
+0

我其实已经试过了,但仍然是同样的问题 – Badshah 2012-08-06 10:14:49

+0

@Badshah - 然后你的文本里面有新的行。看我的编辑。 – 2012-08-06 10:17:18

0
string str; 
int i; 
cout<<"input:"; 
getline(cin, str); 
// you want to read the whole line, operator>> will read until whitespace 
cout<<"integer:"; 
cin>>i;