2016-11-17 1 views
0

私はあなたが入力30ビット長の5つの単語それぞれにできる文字の配列を作成した上で、私は例の文字列にポインタを使用するには?

char name[5][30]; 
for (int i = 0; i < 5; i++) 
    cin >> name[i]; 

for (int i = 0; i < 5; i++) 
    cout<<name[i]; 

このコードは、私の質問は、特定のではない知っているが、私はそれを説明しましょう。それはうまく動作しますが、あなたが入力しようとしている単語の数がわからないときにポインタを使用しようとすると、 5行目でint型の値がcharに代入されず、エラーを理解できるというエラーが出ますが、どのようにこの問題を解決するのですか?

int n; 
cout << "Number of names" << endl; 
cin >> n; 
int *name; 
name = new char[n][30]; 
for (int i = 0; i < 5; i++){ 
    cin >> *name; 
    name++; 

} 

for (int i = 0; i < 5; i++){ 
    cout << *name; 
    name++; 
} 
+4

はどのように正確には 'name'の初期化されていないが、自動的に' new'-ED配列を指すように期待していますか? –

+3

'std :: vector 'と 'std :: string'です。 –

+0

私は間違いを修正しましたが、問題はまだ残っています。それはタイプミスです –

答えて

3
  • 使用char、ないint
  • nameをインクリメントすることは、印刷する前に最初の要素に戻す必要があるため、お勧めできません。私は配列インデックス演算子を使用しました。
  • 私はn入力&出力の代わりに固定5入力&の出力を行う必要がありますね。
int n; 
    cout << "Number of names" << endl; 
    cin >> n; 
    char (*name)[30]; 
    name = new char[n][30]; 
    for (int i = 0; i < n; i++){ 
     cin >> name[i]; 

    } 

    for (int i = 0; i < n; i++){ 
     cout << name[i]; 
    } 
    delete[] name; 
+0

これは完璧だった、ありがとう。 –

+1

あなたはメモリを解放していません – Raindrop7

+0

@ Raindrop7私が投稿したのは、プログラムのすべてではありません。私はしませんでしたが、後で解放されるかもしれません。 – MikeCAT

関連する問題