| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 641 人关注过本帖
标题:一个简单的程序,希望各位指教
只看楼主 加入收藏
亚小南
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:136
注 册:2009-11-19
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:6 
一个简单的程序,希望各位指教
程序代码:
#include<iostream>
using namespace std;

struct student{
    int number;
    char sex[4];
    struct student *next;
};

void initial(struct student *stu)
{
    int flag=1;
    int i=1;
   
    do{
        printf("请输入第%d个学生的学号:\n",i);
        printf("hello !!!\n");
        scanf("%d",&stu->number);

        printf("请输入第%d个学生的性别:\n",i);
        scanf("%s",&stu->sex);
        stu=stu->next;

        printf("是否继续输入?:\n");
        printf("1 是; 0 否\n");
        scanf("%d",&flag);
        i++;

    }while(flag);
}

void out(struct student *stu)
{
    int i=1;
    for(;stu->next;stu=stu->next)
    {
        printf("第%d个学生的学号:%d\n",i,stu->number);
        printf("第%d个学生的学号:%s\n",i,stu->sex);
        i++;

 
    }
}




int main()
{
    struct student *stu;
    stu=new student[3];
  
    initial(stu);
    

    out(stu);


    return 0;
}


这个程序能够通过编译
但在运行的时候出了问题
在输入第二个学生的信息的时候
出现了错误
我想知道问题是出在哪里,怎么解决
希望各位大虾指教
感激不尽
搜索更多相关主题的帖子: 指教 
2010-04-22 10:40
亚小南
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:136
注 册:2009-11-19
收藏
得分:0 
怎么就没人来看看呢
2010-04-22 11:18
sunhang777
Rank: 1
等 级:新手上路
帖 子:20
专家分:4
注 册:2007-6-30
收藏
得分:4 
stu=(struct student *)(new student[3]);
2010-04-22 23:00
yyblackyy
Rank: 6Rank: 6
等 级:侠之大者
帖 子:98
专家分:457
注 册:2010-3-31
收藏
得分:8 
不明白楼主在干什么啊~
struct student{
    int number;
    char sex[4];
    struct student *next;
};
声明了一个结构体的节点  struct student *stu;stu=new student[3];这里又用数组,矛盾啊
错误的地方:
struct student *temstu2=stu,*temstu=stu;                                 //弄两个临时的指针 保证stu所存储的地址不变,因为你下面要用到的~
do{
        printf("请输入第%d个学生的学号:\n",i);
        printf("hello !!!\n");
        scanf("%d",&temstu->number);
        printf("请输入第%d个学生的性别:\n",i);
        scanf("%s",&stu->sex);                         //改 scanf("%s",temstu->sex)      sex是字符数组 ,他的标识符就是他的地址,不用&符~
         printf("是否继续输入?:\n");        //这个提前
        printf("1 是; 0 否\n");
        scanf("%d",&flag);

            if(!flag)                       //提前判断
                  break;   
         stu=stu->next;              //改 temstu->next=++temstu2; temstu=temstu2; temstu->next=0;
              i++;
    }while(flag);
************************************
struct student *temstu=stu;                           //加入临时的指针保存stu的值,原因是楼主可能还要用到的~
int i=1;
    for(;temstu->next;temstu=temstu->next)
    {
        printf("第%d个学生的学号:%d\n",i,stu->number);
        printf("第%d个学生的学号:%s\n",i,stu->sex);
        i++;

    }
*******************
收回空间 delete[] stu;
这样就行了

                                       

[ 本帖最后由 yyblackyy 于 2010-4-23 01:07 编辑 ]
2010-04-23 00:44
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
回复 楼主 亚小南
我在你的基础上做了修改,调试后过了,运行也正常。
你看看是否符合你的要求,有什么需要改进的,请多多指教!!
程序代码:
#include<iostream>
using namespace std;

struct student
{
    int number;
    char sex[4];
};


student* initial(const int& n)
{
    student* stu;
    stu=(student*)new student[n];

    for(int i=0;i<n;i++)
    {
        cout<<"请输入学生的学号:";
        cin>>stu[i].number;

        cout<<"请输入学生的性别:";
        cin>>stu[i].sex;
    }
    return stu;
}

void out(student *stu,const int& n)
{
    for(int i=0;i<n;i++)
        cout<<"学生的学号:"<<stu[i].number<<endl
            <<"学生的性别:"<<stu[i].sex<<endl;
    return;

}


int main(int argc[], char argv[])
{
    student *stu;
      int n;
    cout<<"请输入学生人数:";
    cin>>n;
    stu=initial(n);
    out(stu,n);

    delete []stu;
    system("pause");
    return 0;
}


 

南国利剑
2010-04-24 01:21
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:8 
如果按楼主原来的意思,用指针的话,得这么写。我试过了,可以通过编译,并且不会出现运行错误。请楼主试试。
程序代码:
#include<iostream>
using namespace std;

struct student
{
    int number;
    char sex[4];
    student *next;
};

void initial(student *stu)
{
    int flag=1;
    int i=1;
  
    do
    {
        printf("请输入第%d个学生的学号:\n",i);
        printf("hello !!!\n");
        scanf("%d",&stu->number);

        printf("请输入第%d个学生的性别:\n",i);
        scanf("%s",&stu->sex);
        //stu=stu->next;

        printf("是否继续输入?:\n");
        printf("1 是; 0 否\n");
        scanf("%d",&flag);
        if(flag)
        {
            i++;
            stu->next=stu+1;  //这里只能这么写,而不能写成stu->next=++stu;
            stu++;
        }
        else
            stu->next=NULL;
        

    }while(flag);
}

void out(student *stu)
{
    int i=1;
    do
    {
        cout<<""<<i<<"个学生的学号:"<<stu->number<<endl;
        cout<<""<<i<<"个学生的学号:"<<stu->sex<<endl;
        i++;
        stu=stu->next;
    }while(stu);
}


int main()
{
    student* stu;
    student* head;
    stu=(student*)new student[3]; //这里必须进行强制类型转换
   
    head=stu;

 
    initial(stu);
    out(head);
    delete[] head;  //这里必须释放动态空间
    system("pause");
    return 0;
}


[ 本帖最后由 南国利剑 于 2010-4-24 03:09 编辑 ]

南国利剑
2010-04-24 03:08
亚小南
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:136
注 册:2009-11-19
收藏
得分:0 
感谢大家乐
2010-04-25 22:15
快速回复:一个简单的程序,希望各位指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022514 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved