我正在做一个我正在输入的任务,而不是你想要输入,然后我通过使用getline输入一个完整的行,但是sime我怎么也做不到。
这里当我尝试输入'1'作为我的号码时。对于测试用例,它立即给出'0'作为答案并且在循环之外为什么不是这个cin>>测试;这里与getline兼容(cin,s);
#include<iostream>
#include<string>
using namespace std;
int main()
{
int test,j;
cin>>test;
int len;
string s;
for(j=1;j<=test;j++)
{
getline( cin,s);
len = s.length();
cout<<len;
}
return 0;
}
困难
input :
1
output:
0
expected
input:
1
Hello World
output
11
我混合了一点C来得到我的回答
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int main()
{
int test,j;
scanf("%d\n",&test);
int len;
string s;
for(j=1;j<=test;j++)
{
getline( cin,s);
len = s.length();
cout<<len;
}
return 0;
}
答案 0 :(得分:6)
您正在混合格式化输入和未格式化输入功能。
operator>>
在您在输入缓冲区中提取的数字之后留下尾随换行符,但这对于使用operator>>
进行的后续读取不是问题,因为它会在读取之前跳过它找到的所有空格。另一方面,getline
读取,直到找到分隔符(默认为\n
)而不跳过任何内容。
长话短说:如果您想使用getline
,则必须在\n
后的cin>>test;
清除缓冲区:
#include <limits>
// ...
cin>>test;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
答案 1 :(得分:0)
for(j=1;j<=test;j++)
{
getline( cin,s);
len = s.length();
cout<<len;
}
这是读取int和带有一个carridge返回的字符串。
它读取1作为总数,然后没有作为字符串(因此长度为0)。 尝试1TEST,这应该给你4的长度。
答案 2 :(得分:0)
我相信您的问题是您将输入流作为参数给予缓冲区。 试试这个。
{
char szInput[256];
cin.getline( szInput,256);
len = strlen(szInput);
cout<<len;
}