2016-11-29 8 views
0

以下の割り当てが与えられました2次元配列をC++で使用する電話帳プログラム

単純な電話帳プログラムを作成します。ハードコード名と電話番号を持つ2次元配列が含まれています。次に、単純な文字配列を宣言します。検索したい名前を入力するようにユーザーに指示する必要があります。この名前はこの文字配列に格納し、2次元配列からこの名前を検索する必要があります。数字が入力された名前に対して見つかった場合、プログラムはこの名前に対して数字を表示しなければなりません。見つからなければ、名前が登録されていないというメッセージが表示されます。

私のコードはここにありますが、名前を検索すると数字が表示されませんでした。私はこのコードを動作させることに問題があるので、コーディングに新しいです。ヘルプは高く評価されます。

#include <iostream> 
#include <conio.h> 
using namespace std; 

int getPhone(int p[5][10],int row, int col, char key[10],char n[5][10]); 

int main() { 
    int i,j; 
    char search[10]; 
    const int r = 5; 
    const int c = 10; 
    int element; 
    int phone[r][c] = 
    { 
    42-5429874, 
    42-5333156, 
    42-9824617, 
    42-9927562, 
    42-6238175 
    }; 

    char name[r][c] = {"shazia","zara","sana","ahmad","maha"}; 
    cout<<"\nEnter name to find in directory : "; 
    cin>>search[r]; 

    element = getPhone(phone,r,c,search,name); 
    cin.get(); 
    return 0; 
    } 

int getPhone(int p[5][10],int row,int col,char key[10], char n[5][10]) { 
    int i, j; 
    for(i=0;i<row;i++) 
    for(j=0;j<col;j++) 
     p[5][10] = p[i][j]; 
    if(key[j] = n[5][10]) 
     cout<<"The desired number is: "<<p[i][j]<<endl; 
     else if(key[j]!=n[5][10]) 
     cout<<"Sorry! This name is not registered."; 

    return p[i][j]; 
} 
+1

あなたのGetPhoneは完全なナンセンスです。 – Eugene

+0

'search'は10個の' char'sの配列なので、 'search [r]'は 'search'の' r'番目の 'char'です。それは1つの 'char'であることを重視します。 'cin >> search [r]'は正確に一つの文字を読み込み、 'search'の' r'番目の 'char'に入れます。 'search'の他の9文字には、値が割り当てられていないので、誰も何も言えません。 – user4581301

答えて

2

あなたのコードにはいくつかの間違いがあります。それらを調べてみましょう。ここで

for(i=0;i<row;i++) 
    for(j=0;j<col;j++) 
     p[5][10] = p[i][j]; 

p[5][10]の値だけが変更されているので、あなたは、あなたの配列には何の変更を行いません。さらに、配列インデックスはC++の0からsize - 1になるため、無効なメモリゾーンにアクセスします。最後のインデックスはp[4][9]です。 C++で

if(key[j] = n[5][10]) 

つのみが常に真であるとif結果気取りであるため、2つの値を比較して、2 =を必要とします。覚えておくべきヒント:比較する2つの値は2つ必要です=

無効なメモリゾーンにアクセスしています。 jが有効かどうか、たとえば10未満ですか?そうでない場合は、無効なアクセスを2回行います。 searchとして

cin>>search[r]; 

charの配列である、あなたは私はあなたが望むものではないと思いますが、単一のcharの入力を、行うと、その缶がセグメンテーションフォールトにつながります。

int phone[r][c] = 
    { 
    42-5429874, 
    42-5333156, 
    42-9824617, 
    42-9927562, 
    42-6238175 
    }; 

あなたの配列は良くありません。単純な1次元配列で十分です.2次元ではありません。さらに、42-54..は減算を行い、あなたが望むものではないと思います。

その他の間違いがあります。しかし、なぜstd::vector、またはstd::stringのようなC++抽象化を使用しないのですか?あなたの人生ははるかに簡単になるでしょう。しかし、私はあなたがC++のニュースを学ぶために時間がかかったことはありません古い教師を持っている、またはそれは良い先生ではありません...

初心者として

と思い、私はあなたがあなたのプログラミングと現代の両方を導入しC++ PrimerProgramming: Principles and Practice Using C++を読むことをお勧めC++。

幸運を祈る!