2017-03-18 13 views
0

だから、cin.get()の使い方やバッファの使い方など知っていました。ここでは、テーブルのn(番号または行)とm(列の数)を取得するサンプルプログラムを示します。次に、n * m文字を取得し、配列に保存して出力します。C++でcin.get()を使って行末の文字を取得しない方法

#include <bits/stdc++.h> 
using namespace std; 
int n, m; 
char in; 
char a[100][100]; 
int main() 
{ 
    cin >> n >> m; 
    for(int i = 0;i < n; ++i) 
    { 
     for(int j = 0;j < m; ++j) 
     { 
      cin.get(in); 
       a[i][j] = in; 
      if(j == m - 1) 
       cin.get(); 
     } 
    } 
for(int i = 0;i < n; ++i) 
{ 
    for(int j = 0;j < m; ++j) 
    cout <<a[i][j]; 
    cout << endl; 
} 
    return 0; 
} 

このプログラムは、行の最後にいくつかの文字を数えているようです。誰かがそれを修正して私を説明することはできますか?前もって感謝します!

+0

あなたは私たちに入力例をまくことができますか? – Christophe

+0

'#include 'と 'namespace std;を使うことは危険な操作です。 g ++のプリコンパイルされたヘッダーでの使用のみを目的とした非標準ヘッダーを使用して、標準ライブラリ全体をほとんど含める。それはあなたが衝突する可能性のある多くの識別子です。幸いにも 'std'名前空間は大虐殺を防ぐ。 'using namespace std;'を除いて、 'string'、' swap'、 'reverse'のような共通名をもつ数万の識別子の地雷を作成し、潜むチャンスを待っている' std'名前空間を指定する必要がなくなります。あなたのプログラムを爆破する。 – user4581301

+0

パフォーマンスノート: 'cout << endl;'は、改行とともにストリームのフラッシュを強制するので、かなり高価です。速度が必要な場合、 'cout << '\ n';'ははるかに高速です。とにかく一般原則からやって来る価値がある。 – user4581301

答えて

0

nとmを入力すると、cin.get()は数字の後に続くchar(空白または改行)ですぐに開始します。したがって、あなたが期待する入力とあなたが得る入力との間にシフトがあるかもしれません。これにより、改行でなくても、すべてのm個の文字が無視されます。また、別の文字の代わりに読み込まれる改行がいくつかあります。

数字の抽出後、最初の改行まで、cin.ignore()の文字が安全になります。

同様に、期待する改行であれば、スキップしたn番目の文字をチェックします。

0

endlと空白文字が必要ない場合はcinを使用する必要があります。

ジャスト(cin.getを置き換える)CINと>>

#include <bits/stdc++.h> 
using namespace std; 
int n, m; 
char in; 
char a[100][100]; 
int main() 
{ 
    cin >> n >> m; 
    for(int i = 0;i < n; ++i) 
    { 
     for(int j = 0;j < m; ++j) 
     { 
      cin>>in; 
       a[i][j] = in; 
     } 
    } 
for(int i = 0;i < n; ++i) 
{ 
    for(int j = 0;j < m; ++j) 
    cout <<a[i][j]; 
    cout << endl; 
} 
    return 0; 
} 
+0

はい私はこの部分を編集しました! –

関連する問題