2017-06-12 6 views
0

実行時にnの整数の場合、nの文字列を入力する必要があります。複数の文字列を空白で2次元の文字配列で入力する

入力のためのテストケースの形式は次のとおりです。CINは空白をスキップするため

3 
xyz b 
abcd 
defg 

だから私はこのような入力を取っています。

int n, column = 1000;// maximum size of strings=1000 
cin >> n; 
char **String = 0; 
String = new char *[n]; 
int i; 
for (i=0; i < n; i++){ 
    String[i] = new char [column]; 
    } 

for (i = 0; i < n; i++)    
cin.getline(String[i],1000) 
} 

2番目の文字列の後、つまり "abcd"は3番目の文字列として改行を取ります。何故ですか? これが間違っている場合、この場合どのように入力しますか?

+0

最後の行を改行で終了していますか? –

+0

@MalcolmMcLean 2番目の文字列の後に改行を3番目の文字列として取ります。何故ですか? –

答えて

0

コードは正しいです。問題は、入力が端末で与えられる方法にあります。

プログラムを実行し、n = 2とすると、つまり2つの文字列を入力したいとします。 2を入力した後にEnterキーを押すと、Stringsに入る最初の文字列は空の文字列になります。しかし、文字列を入力すると、最初に入力するつもりで、2の直後(2の後に空白がない)に問題が解決されます。

入力方法を変更したくない場合(つまり、入力したい文字列の数を入力した後にEnterキーを押してから、次の文字列を入力したい場合)上記のコードで次のループの前にcin.getline(String[0], 1000)と書いてください。私たちは(、nは入力されているこの回答に上記の詳細を参照する、2)Stringに最初の入力文字列として2の後に空のスペースを取ることはなく、下記のループが新たに入力を服用開始した後のために

for (i = 0; i < n; i++)    
    cin.getline(String[i],1000) 

、次の行(実際に入力しようとする最初の行)の端末で続く入力文字列はString[0]に保存されます。 それで問題は解決されます。

+0

ありがとう!わかった。 –

+0

ちょうど知識のために、もし私がcinオペレータで入力を取ると同じことが起こるでしょうか? –

+0

いいえ、それは 'cin >> input_variable'では起こりません。私が見たところでは、cinは入力を空白で区切ります(空白、タブ、改行など)。 シンク入力文が3つ連続しているとします。入力を提供している端末では、3つの値(入力したい値)をそれぞれの間にタブまたはスペースを入れて1行に入れるか、または書き込んだ入力値のそれぞれの後にEnterを押すことができますターミナルに。 –

関連する問題