我无法动态分配我的结构

时间:2017-01-07 06:56:50

标签: c++

我创建了一个简单的程序来帮助我理解如何动态分配结构。我希望程序从用户获得5个名称和5个帐户,并显示名称和帐户。我知道指针就像一个引用变量,唯一的差异而不是传递值,它传递变量的地址。我为第23行设置了一个突破点(“getline(std :: cin,clientPtr [count] .name);”),第25行(“std :: cin.ignore(std :: numeric_limits :: max(),' \ n');“), 第27行(“std :: cin>> clientPtr [count] .accounts;”),第40行(“std :: cout<<”名称:“<< clientPtr [count] .name;” ),第41行(“std :: cout<<”名称:“<< clientPtr [count] .name;”),第31行(showInfo(& client);)。当我调试时,它显示第41行没有执行。它应显示每个客户的名称和帐户。在这种情况下,它不是。我不确定为什么,只是我的一点背景,我是C ++的新手,以及使用调试器。我正在使用xcode 8.2,我使用的调试器是lldb。我在这里学习,所以一切都会有所帮助。感谢。

#include <iostream>
#include <limits>
struct BankInfo
{
    std::string name;
    std::string accounts;

};

void showInfo(BankInfo*);

int main()
{
    BankInfo client;

    BankInfo* clientPtr=nullptr;

    clientPtr = new BankInfo[5];

    for(int count =0; count < 5; count++)
    {
        std::cout << "Enter your name:";
        getline(std::cin,clientPtr[count].name);
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
        std::cout << "Enter you account number:";
        std::cin >>clientPtr[count].accounts;


    }
    showInfo(&client);


    return 0;
}
void showInfo(BankInfo* clientPtr)
{
    for(int count =5; count < 5; count++)
    {
        std::cout <<"Name:" << clientPtr[count].name;
        std::cout <<"Account:" << clientPtr[count].accounts;
    }
}

3 个答案:

答案 0 :(得分:0)

你把错误的东西交给showInfo()。您有两个变量..一个BankInfo变量和一个大小为5的动态分配数组。

你想迭代后者,而不是前者。

showInfo(&client);更改为showInfo(clientPtr);或许可以做到这一点?

答案 1 :(得分:0)

所以我修复了我犯了几个错误的解决方案,但谢谢你的建议。这就是我做的。

#include <iostream>
#include <limits>
struct BankInfo
{
    std::string name;
    std::string accounts;

};

void showInfo(BankInfo*);

int main()
{
    BankInfo client;

    BankInfo* clientPtr=nullptr;

    clientPtr = new BankInfo[5]; //Allocate an array of BankInfo struct on the heap

    for(int count =0; count < 5; count++)
    {
        std::cout << "Enter your name:";
        getline(std::cin,clientPtr[count].name); // stores the value in the name member
        std::cout << "Enter you account number:";
        std::cin >>clientPtr[count].accounts; // stores the value in accounts member
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');

    }
    showInfo(clientPtr);

    delete [] clientPtr;
    clientPtr = nullptr;
    return 0;
}
void showInfo(BankInfo* clientPtr)
{
    for(int count =0; count < 5; count++)
    {
           std::cout <<"\nName:" << clientPtr[count].name; // dereference the pointer to the structure 
           std::cout <<"\nAccount:" << clientPtr[count].accounts; // dereference the pointer to the structure

    }
}

答案 2 :(得分:-1)

for(int count=1 ; count<=5 ; count++)
{
//do your stuff here
}