【发布时间】:2018-11-09 04:49:40
【问题描述】:
所以我输入了一些整数,然后输入了一些句子。
这段代码运行良好:
#include<bits/stdc++.h>
using namespace std;
main(){
int c,b,n,i;string s;
cin>>n>>b>>c;
for(i=0;i<n;i++){
cin>>ws;
getline(cin,s,'\n');
cout<<s;
}
}
例子:
3 3 3
This is weird
This is weirdDefinitely makes
Definitely makesNo sense
No sense
但是,当我尝试在 forloop 中省略 cin>>ws 时,它不能正常工作,例如这个代码段,
#include<bits/stdc++.h>
using namespace std;
main(){
int c,b,n,i;string s;
cin>>n>>b>>c;
for(i=0;i<n;i++){
getline(cin,s,'\n');
cout<<s;
}
}
例子:
3 3 3
This is weird
This is weirdDefinitely makes
Definitely makes
.. 并在那里终止,而不是采用所有三个输入。 这是为什么? cin>>ws 从输入中提取所有空格,但 getline() 不是也这样做吗?那么为什么当我在 forloop 中省略 cin>>ws 时它不能正常工作呢?
【问题讨论】:
-
实际问题是什么:使用
std::ws的代码以何种方式无法按预期工作? -
您是从文件重定向输入还是实际在控制台输入?
-
@DietmarKühl 问题是如果我在 forloop 中省略了 cin>>ws ,它就不能正确输入,这是为什么呢?
-
@MarkRansom 在控制台输入
-
“无法正确输入”是什么意思?理想情况下,提供输入和预期输出,或者更好的是,使用
std::istringstream演示问题。