注册 登录
编程论坛 C++教室

请教一个c++类的问题,这个程序错在哪儿啊?运行时无法给字符串赋值

蓝天绿水 发布于 2017-09-18 22:45, 2258 次点击
程序代码:
#include <iostream.h>

using namespace std;
class node
{
    private:
        int ID;
        char *name;
        int Tel;
    public:
        node ()
        {
            ID=0;name=0;Tel=0;
        }
        node (int a,char *b,int c)
        {
            ID=a;name=b;Tel=c;
        }
        void setnode()
        {
            cout<<"input ID: "<<endl;
            cin>>ID;
            cout<<"input name: "<<endl;
            cin>>name;   //这一行代码一直运行出错
            cout<<"input Tel: "<<endl;
            cin>>Tel;
        }
        void output()
        {
            cout<<ID<<" "<<name<<" "<<Tel<<endl;
        }
        ~node(){}
};
int main ()
{
    node zx;
    zx.setnode();
    zx.output();
    return 0;
}
5 回复
#2
rjsp2017-09-19 07:47
cin>>name; 是从控制台输入字符到name指向的内存中。
比如
char name[100];
cin >> name;
比如
char* name = new char[100];
cin >> name;
#3
蓝天绿水2017-09-19 12:48
那应该怎么改啊,我就是想让用户自己输出字符串再赋值给name,但是一直出错
#4
苍穹之舞2017-09-19 14:52
以下是引用蓝天绿水在2017-9-19 12:48:37的发言:

那应该怎么改啊,我就是想让用户自己输出字符串再赋值给name,但是一直出错

#include <iostream>
using namespace std;

class node
{
    private:
        int ID;
        char* name ;// 把整型变量改了  指针
        int Tel;
    public:
        node ()
        {
            ID=0;name= new char[100];Tel=0; //  指向字符数组的首地址
        }
        node (int a,char *b,int c)
        {
            ID=a;name=b;Tel=c;
        }
        void setnode()
        {
            cout<<"input ID: "<<endl;
            cin>>ID;
            cout<<"input name: "<<endl;
            cin>>name;   //这一行代码一直运行出错
            cout<<"input Tel: "<<endl;
            cin>>Tel;
        }
        void output()
        {
            cout<<ID<<" "<<name<<" "<<Tel<<endl;
        }
        ~node(){}
};
int main ()
{
    node zx;
    zx.setnode();
    zx.output();
    return 0;
}

#5
yangfrancis2017-09-19 18:32
用了char*name之后就用cin>>name之所以不可以,就是因为该指针只是做了声明,还没有指向某个地址。不论改成char name[100]还是char*name; name=new char[100],说到底都是要让指针name有一个确切指向的地址,有了确切地址才能接受输入。
#6
蓝天绿水2017-09-19 19:42
哦,懂了,是因为类在申明是并未分配内存,谢谢
1