getline()会读取留缓存区的换行符导致直接换行,以前也没有注意吧,最近才注意到。
#include
#include
#include
#include
#include
using namespace std;
//把一个字符串中的数字子序列找出来并转换成十进制整数输出
int main()
{
int T;
string str;
scanf("%d",&T);
while(T--){
getline(cin,str);//cin>>str;
for(auto &i : str )
if(!isdigit(i)) i=' ';
stringstream line(str);
unsigned x,cot=0;
while(line>>x) {
if(cot==0) printf("%d",x);
else if(cot==1)printf(" %d ",x);
else printf("%d ",x);
cot++;
}
if(T) printf("\n");
}
return 0;
}
比如
本来可以输入2组数据的,却只能输入一组
简化一下程序
#include
#include
using namespace std;
int main()
{
string str1;
int x;cin>>x;
//while(x--){
getline(cin,str1);
cout<
也是这样
但是如果getline()前面没有输入操作
#include
#include
#include
#include
#include
using namespace std;
int main()
{
int T=2;
string str;
//scanf("%d",&T);printf("\n");
while(T--){
getline(cin,str);//cin>>str;
for(auto &i : str )
if(!isdigit(i)) i=' ';
stringstream line(str);
unsigned x,cot=0;
while(line>>x) {
if(cot==0) printf("%d",x);
else if(cot==1)printf(" %d ",x);
else printf("%d ",x);
cot++;
}
//getchar();
if(T) printf("\n");
}
return 0;
}
则可以
因此笔者觉得,getline可以读取上前面的换行符(还在缓存区的换行)
解决方法用getchar();吸掉那个换行。
#include
#include
#include
#include
#include
using namespace std;
int main()
{
int T=2;
string str;
scanf("%d",&T);getchar();
while(T--){
getline(cin,str);//cin>>str;
for(auto &i : str )
if(!isdigit(i)) i=' ';
stringstream line(str);
unsigned x,cot=0;
while(line>>x) {
if(cot==0) printf("%d",x);
else if(cot==1)printf(" %d ",x);
else printf("%d ",x);
cot++;
}
//getchar();
if(T) printf("\n");
}
return 0;
}
然后搜索了一下解释:
C执行输入语句,要等到用户输入数据 并 打入 Enter 键后才开始。
用户打入的数据和 Enter 键 都在 输入 缓冲区 中。
输入语句 是从 缓冲区 中 依次 取 数。
下一个输入语句, 先到缓冲区 中 找没读完的数,缓冲区若有数,
就取来用,若没有,就等待,一直等到 用户 打入 Enter 键,再开始取数。
由于getchar(); 只读一个 字符,
例如:
char x;
printf("Enter 1 please: ");
x=getchar();
putchar(x);
x=getchar(); // 吸收Enter
printf("\n");
printf("Enter 2 please: ");
x=getchar();
putchar(x);
叫你打1,但只打1 无 Enter 键,输入语句并不开始执行,
你若打了1,又打了Enter 键,getchar();只用去 1,余下的 Enter 键,还在 缓冲区,如果不用 吸收Enter 那句,printf("Enter 2 please: "); 后 面的 getchar(); 就 不等你输入,就从 缓冲区 取Enter,程序就结束了。
From http://zhidao.baidu.com/link?url=4XRMlbBZ9SuWM1svFIUGLPN-MkuS02ipom17xArlM8FJIW1SDGcaJKnnhGJTlL7284CaAj2RiflYdYW2Y2j1E_
谢谢