我正在尝试研究关于数组的c ++ 我在显示数组名称
中的名称时遇到问题因为当我尝试根据他所在的位置显示乘客的名字时 第一个字母成为他名字的最后一个字母..ahmm
这是我的代码
#include <iostream.h>
#include <conio.h>
char* name[10]={" "};
int* seat=0;
char* pname="The Passenger is: ";
char ask;
void display();
int main()
{
clrscr();
cout<<"The Entering of name and seat number..."<<endl;
do
{
cout<<"\nEnter your name: ";
cin>>*name;
cout<<"Enter your seat number: ";
cin>>*seat;
cout<<"Do you want to input again?(Y/N): ";
cin>>ask;
}
while(ask=='y'||ask=='Y');
cout<<"\nDo you want to see the passenger's name?(Y/N): ";
cin>>ask;
if(ask=='y'||ask=='Y')
{
cout<<"\nThe Program will now direct you to the displaying of passenger's name...."<<endl;
display();
}
else
{
cout<<"\n\nThe Program will end shortly....";
}
getch();
return 0;
}
void display()
{
do
{
cout<<"\nEnter seat number to display passenger's name: ";
cin>>*seat;
cout<<pname<<*name[*seat-1]<<endl;
cout<<"Do you want to try again?(Y/N): ";
cin>>ask;
}
while(ask=='y'||ask=='Y');
cout<<"\nThe Program will now end shortly....";
getch();
}
答案 0 :(得分:1)
你似乎遇到指针问题。即
int* seat=0;
不会为整数分配空间,而是为指针分配空间,然后设置此指针并将其设置为地址0.执行时
cin>>*seat;
您的程序尝试取消引用不指向任何内容的指针。此外,当你执行
cin >>*name
您没有写入整个字符串,而是写入取消引用位置,即字符串的第一个字符。
开始更改
int* seat=0;
到
int seat = 0
和
cin>>*name;
到
cin>>name;
祝你好运!
编辑:
你也想改变:
cin >> *seat;
到
cin >> seat
答案 1 :(得分:1)
要显示数组名称的名称 ,首先要正确定义数组。:)
如果您还不知道标准类std::string
那么应该定义数组,例如
char name[10][20];
它可以存储10个长度不超过20个字符的名称。
或者,如果您了解课程std:string
,那么您可以将其定义为
#include <string>
std::string name[10];
定义
会更好#include <string>
#include <array>
std::array<std::string, 10> name;
对于这个程序,既不需要定义指针。
考虑到当您要求输入座位号时,您应检查此号码是否在1 - 10范围内(在这种情况下,当您使用它来访问阵列时,您需要将其减少一个)或0 - 9.
答案 2 :(得分:1)
尽管如此,您可能需要在基本语言功能方面进行更多练习,例如指针,您可以使用一些现有的数据结构。由于您使用 cout 和 cin ,我假设您的编译器支持C ++标准库。我会用地图来拯救乘客。
#include <iostream>
#include <map>
struct passenger
{
char name[10];
};
std::map<int, passenger> passengers;
int seat;
char ask;
void display();
int main()
{
std::cout<< "The Entering of name and seat number..." << std::endl;
do
{
passenger p;
std::cout << "\nEnter your name: ";
std::cin >> p.name;
std::cout << "Enter your seat number: ";
std::cin >> seat;
// add passenger to the map
passengers.insert(std::pair<int, passenger>(seat, p));
std::cout << "Do you want to input again?(Y/N): ";
std::cin >> ask;
}
while(ask=='y'||ask=='Y');
std::cout << "\nDo you want to see the passenger's name?(Y/N): ";
std::cin >> ask;
if(ask=='y' || ask=='Y')
{
std::cout << "\nThe Program will now direct you to the displaying of passenger's name...." << std::endl;
display();
}
return 0;
}
void display()
{
do
{
std::cout << "\nEnter seat number to display passenger's name: ";
std::cin >> seat;
// check if passenger data is available for this seat
if(passengers.find(seat) != passengers.end()) {
std::cout << "The Passenger is: " << passengers[seat].name << std::endl;
} else {
std::cout << "Seat still available ..." << std::endl;
}
std::cout << "Do you want to try again?(Y/N): ";
std::cin >> ask;
}
while(ask=='y' || ask=='Y');
}
答案 3 :(得分:0)
如果您使用指针*seat
,则无需访问它
cin>>*seat
。您只需要写cin>>seat
。
在学习cpp时,请查看指针。
这里也有一些信息,虽然这不完全是主题,
int *S; // pointer of type int
int x; // variable of type int
S = &x; // pointer S is now pointing to memory location of x
S = 4;
OR
x = 4; //更改S指向的内存位置的内容
cout&lt;&lt; * S; //显示S指向的内存地址,即 X