getline()一个给出困难的字符串

时间:2012-06-18 10:03:59

标签: c++

我正在做一个我正在输入的任务,而不是你想要输入,然后我通过使用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;
}   

3 个答案:

答案 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;  
}