我获得了以下作业
写一个简单的电话目录程序;包含二维数组,其中包含硬代码名称和电话号码。然后声明一个简单的字符数组。您必须提示用户输入您要搜索的任何名称。此名称应存储在此字符数组中,然后从二维数组中搜索此名称。如果找到输入名称的编号,则程序应显示该名称的编号,如果未找到,则程序应显示名称未注册的消息。
这是我的代码,但是当我搜索名称时,我无法获得该号码。我是编码的新手,所以我无法使这段代码工作。感谢帮助。
#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];
}
答案 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];
由于search
是char
的数组,因此您只输入一个char
,我认为这不是您想要的,这可能会导致段错误。< / p>
int phone[r][c] =
{
42-5429874,
42-5333156,
42-9824617,
42-9927562,
42-6238175
};
你的数组不好,一个简单的一维数组就足够了,而不是二维数组。此外,42-54..
进行减法,我认为不是你想要的。
其他错误。但为什么不使用C ++抽象,如std::vector
或std::string
?你的生活会变得如此简单。但我猜你有一位老教师从来没有花时间学习C ++新闻,或者那不是一位好老师...
作为初学者,我建议您阅读C++ Primer和Programming: Principles and Practice Using C++,向您介绍编程和现代C ++。
祝你好运!