在c ++中使用2D数组的电话目录程序

时间:2016-11-29 20:29:06

标签: c++ arrays search directory 2d

我获得了以下作业

写一个简单的电话目录程序;包含二维数组,其中包含硬代码名称和电话号码。然后声明一个简单的字符数组。您必须提示用户输入您要搜索的任何名称。此名称应存储在此字符数组中,然后从二维数组中搜索此名称。如果找到输入名称的编号,则程序应显示该名称的编号,如果未找到,则程序应显示名称未注册的消息。

这是我的代码,但是当我搜索名称时,我无法获得该号码。我是编码的新手,所以我无法使这段代码工作。感谢帮助。

#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 个答案:

答案 0 :(得分: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]

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

在C ++中,比较两个值需要两个=,因为只有一个是一种使if始终为真的效果。要记住的提示:要比较的两个值需要两个=

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

与以前相同,您访问无效的内存区域。您确定j有效,例如小于10吗?如果没有,则会进行双重无效访问。

cin>>search[r];

由于searchchar的数组,因此您只输入一个char,我认为这不是您想要的,这可能会导致段错误。< / p>

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

你的数组不好,一个简单的一维数组就足够了,而不是二维数组。此外,42-54..进行减法,我认为不是你想要的。

其他错误。但为什么不使用C ++抽象,如std::vectorstd::string?你的生活会变得如此简单。但我猜你有一位老教师从来没有花时间学习C ++新闻,或者那不是一位好老师...

作为初学者,我建议您阅读C++ PrimerProgramming: Principles and Practice Using C++,向您介绍编程和现代C ++。

祝你好运!