-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バッファを消去する必要があります:\ncin>>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 つのカートリッジ リターンで読み込んでいます。

合計として 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 に答える