-1

我正在做一个任务,我输入你想要输入的时间,然后我通过使用 getline 输入一个完整的行,但是我无法做到这一点。

在这里,当我尝试输入“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;
}   
4

3 回答 3

7

您正在混合格式化输入和未格式化输入函数。

operator>>在您在输入缓冲区中提取的数字之后留下尾随换行符,但这对于随后完成的读取来说不是问题,operator>>因为它会跳过它在读取之前找到的所有空白。另一方面,getline读取直到找到分隔符(\n默认情况下)而不跳过任何内容。

长话短说:如果你想使用getline你必须从\n你的后面清理缓冲区cin>>test;

#include <limits>
// ...

cin>>test;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
于 2012-06-18T10:08:58.943 回答
0
for(j=1;j<=test;j++)     
{          
getline( cin,s);         
len = s.length();         
cout<<len;      
} 

这是读取 int 和带有一个回车的字符串。

它读取 1 作为总数,然后什么都不作为字符串(因此长度为 0)。试试 1TEST,这应该给你 4 的长度。

于 2012-06-18T10:09:24.923 回答
0

我相信您的问题是您将输入流作为参数提供给缓冲区。试试这个。

{  
    char szInput[256];  
    cin.getline( szInput,256);  
    len = strlen(szInput);  
    cout<<len;  
}
于 2012-06-18T10:41:52.613 回答