一个非常简单的C++问题(菜鸟阶段)
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1,s2;
while (cin >> s2)
{
s1 = s1 + s2;
}
cout << s1 << endl;
return 0;
}
为什么编译后不能达到想要的结果(可以随便输入就是没输出囧~~)题目的要求是:从标准输入读取多个string对象,把他们连接起来放到一个更大的string对象中,并输出连接后的string对象;
我的另一个思路是这样的:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1,s2;
while (cin >> s2)
{
s1 = s1 + s2;
cout << s1 << endl;
}
return 0;
}
但不能保证一次达到预想的效果,感觉不是很好,还请多多指点啊~~~
[解决办法]
第一个输出在while之外,当然没有输出。第二个楼主想表达什么没达到?
[解决办法]
输入结束后按Ctrl+z,再回车就输出了。
[解决办法]
第一段的while是个死循环。
[解决办法]
我在想是不是endl刷新缓冲区的问题,第二次程序中每次循环都刷新了缓冲区的,第一个似乎是死循环,我也是菜鸟,我前不久也遇见这个问题,愿求正解。
[解决办法]
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1,s2;
getline(cin,s2);
while(s2!="")
{
s1 = s1 + s2;
getline(cin,s2);
//cout << s1 << endl;
}
cout << s1 << endl;
return 0;
}
[解决办法]
你之所以没有输出,是因为你的第一个程序根本就没有跳出while循环,在windos下输入ctrl+z再回车即可跳出,在linux下式ctrl+d.你试试肯定会有输出的。
附以下两点说明:
1.再输入时,系统以空格划分字符。例如你输入“hello world”回车,与分别输入“hello”和“world”加回车的效果是一样的,s2会先后接收“hello”和“world”。
2.能不能跳出while循环,就看cin的状态标志为是否失效,具体可查一下IO流对象的条件状态相关知识。上面说到的ctrl+c和ctrl+d分别是windows和linux下的文件结束标记。