新人求大神帮忙解答一下链表中字符串的输入问题

陈伯伯啊 学生  2018-03-27 01:21:43
/*输入N个学生的姓名、学号和C语言成绩;输入0结束;

找出成绩最高的学生,并输出该学生的姓名,学号和成绩。

要求使用链表实现。*/
#include<iostream>
using namespace std;
struct link {
char name[100];//?
int id;
double sco;
link *next;
};
int main()
{
link *head, *p,*q,*mid;
int n, i;
head = p = new link;
cout << "please enter the student's number." << endl;
cin >> n;
for (i = 0;i < n+1;i++)//一个个输入数据
{
q = new link;
q = p->next;
cout << "please enter the " << i << " student's name,id and score in order.";
cin>> q->id >> q->sco;
cin.getline(p->name, 100);//?
p = q;
}
mid = new link;//定义一个新的储存节点
p = head;
double score=0;
for (i = 0;i < n + 1;i++)
{
p = p->next;
if (p->sco > score)//比较大小
{
score = p->sco;
strcpy_s(mid->name, p->name); //字符赋给一个链表节点
mid->id = p->id;
mid->sco = p->sco;
}
}
cout << "name is :" << endl << mid->name << endl << " id is:" << mid->id << endl<<"score is :" << mid->sco << endl;
return 0;
}

以上是我写的代码……
就是,一输入name就直接崩了……我也不知道怎么回事
刚刚接触c++没多久,看了很久也不知道哪错了……求各位帮帮忙。。
...全文
179 点赞 收藏 8
写回复
8 条回复
陈伯伯啊 2018年03月27日
引用 7 楼 cfjtaishan 的回复:
[quote=引用 5 楼 a470271804 的回复:] [quote=引用 2 楼 cfjtaishan 的回复:]
#include<iostream>
#include <cstring>
using namespace std;

struct link {
    char name[100];
    int id;
    double sco;
    link *next;
};

int main()
{
    link *head, *p,*q,*mid;
    int n, i;
    head = p = new link;
    cout << "please enter the student's number." << endl;
    cin >> n;
    for (i = 0;i < n + 1; i++)//一个个输入数据
    {
        q = new link;
        //q = p->next;   //导致异常退出。因为q指向了NULL,因此下面的输入有问题。
        cout << "please enter the " << i << " student's name,id and score in order.";
        cin>> q->id >> q->sco;
        cin.getline(q->name, 100);    /*这儿应该是q->name,不是p->name*/
        p->next = q;   //将新节点加入链表
        p = q;    //修改尾节点
    }
    mid = new link;//定义一个新的储存节点
    p = head->next;
    double score=0;
    for (i = 0;i < n + 1;i++)
    {
        if (p->sco > score)//比较大小
        {
            score = p->sco;
            //strcpy_s(mid->name, p->name); //字符赋给一个链表节点
            strcpy(mid->name, p->name);
            mid->id = p->id;
            mid->sco = p->sco;
        }
        p = p->next;
    }
    cout << "name is :" << endl << mid->name << endl << " id is:" << mid->id << endl<<"score is :" << mid->sco << endl;
    return 0;
}
参考一下吧 注释的那句导致的程序异常退出;
而且编译不给通过……[/quote] 把strcpy用strcpy_s代替 你的编译器不支持strcpy,而是用封装的strcpy_s[/quote] 好的,谢谢大佬~我明白啦
回复 点赞
自信男孩 2018年03月27日
引用 5 楼 a470271804 的回复:
[quote=引用 2 楼 cfjtaishan 的回复:]
#include<iostream>
#include <cstring>
using namespace std;

struct link {
    char name[100];
    int id;
    double sco;
    link *next;
};

int main()
{
    link *head, *p,*q,*mid;
    int n, i;
    head = p = new link;
    cout << "please enter the student's number." << endl;
    cin >> n;
    for (i = 0;i < n + 1; i++)//一个个输入数据
    {
        q = new link;
        //q = p->next;   //导致异常退出。因为q指向了NULL,因此下面的输入有问题。
        cout << "please enter the " << i << " student's name,id and score in order.";
        cin>> q->id >> q->sco;
        cin.getline(q->name, 100);    /*这儿应该是q->name,不是p->name*/
        p->next = q;   //将新节点加入链表
        p = q;    //修改尾节点
    }
    mid = new link;//定义一个新的储存节点
    p = head->next;
    double score=0;
    for (i = 0;i < n + 1;i++)
    {
        if (p->sco > score)//比较大小
        {
            score = p->sco;
            //strcpy_s(mid->name, p->name); //字符赋给一个链表节点
            strcpy(mid->name, p->name);
            mid->id = p->id;
            mid->sco = p->sco;
        }
        p = p->next;
    }
    cout << "name is :" << endl << mid->name << endl << " id is:" << mid->id << endl<<"score is :" << mid->sco << endl;
    return 0;
}
参考一下吧 注释的那句导致的程序异常退出;
而且编译不给通过……[/quote] 把strcpy用strcpy_s代替 你的编译器不支持strcpy,而是用封装的strcpy_s
回复 点赞
陈伯伯啊 2018年03月27日
额,我发现错误了,原来我的代码里面没有输入name的……语句。。。是我傻了。。谢谢各位大佬
回复 点赞
陈伯伯啊 2018年03月27日
引用 2 楼 cfjtaishan 的回复:
#include<iostream>
#include <cstring>
using namespace std;

struct link {
    char name[100];
    int id;
    double sco;
    link *next;
};

int main()
{
    link *head, *p,*q,*mid;
    int n, i;
    head = p = new link;
    cout << "please enter the student's number." << endl;
    cin >> n;
    for (i = 0;i < n + 1; i++)//一个个输入数据
    {
        q = new link;
        //q = p->next;   //导致异常退出。因为q指向了NULL,因此下面的输入有问题。
        cout << "please enter the " << i << " student's name,id and score in order.";
        cin>> q->id >> q->sco;
        cin.getline(q->name, 100);    /*这儿应该是q->name,不是p->name*/
        p->next = q;   //将新节点加入链表
        p = q;    //修改尾节点
    }
    mid = new link;//定义一个新的储存节点
    p = head->next;
    double score=0;
    for (i = 0;i < n + 1;i++)
    {
        if (p->sco > score)//比较大小
        {
            score = p->sco;
            //strcpy_s(mid->name, p->name); //字符赋给一个链表节点
            strcpy(mid->name, p->name);
            mid->id = p->id;
            mid->sco = p->sco;
        }
        p = p->next;
    }
    cout << "name is :" << endl << mid->name << endl << " id is:" << mid->id << endl<<"score is :" << mid->sco << endl;
    return 0;
}
参考一下吧 注释的那句导致的程序异常退出;
而且编译不给通过……
回复 点赞
陈伯伯啊 2018年03月27日
引用 2 楼 cfjtaishan 的回复:
#include<iostream>
#include <cstring>
using namespace std;

struct link {
    char name[100];
    int id;
    double sco;
    link *next;
};

int main()
{
    link *head, *p,*q,*mid;
    int n, i;
    head = p = new link;
    cout << "please enter the student's number." << endl;
    cin >> n;
    for (i = 0;i < n + 1; i++)//一个个输入数据
    {
        q = new link;
        //q = p->next;   //导致异常退出。因为q指向了NULL,因此下面的输入有问题。
        cout << "please enter the " << i << " student's name,id and score in order.";
        cin>> q->id >> q->sco;
        cin.getline(q->name, 100);    /*这儿应该是q->name,不是p->name*/
        p->next = q;   //将新节点加入链表
        p = q;    //修改尾节点
    }
    mid = new link;//定义一个新的储存节点
    p = head->next;
    double score=0;
    for (i = 0;i < n + 1;i++)
    {
        if (p->sco > score)//比较大小
        {
            score = p->sco;
            //strcpy_s(mid->name, p->name); //字符赋给一个链表节点
            strcpy(mid->name, p->name);
            mid->id = p->id;
            mid->sco = p->sco;
        }
        p = p->next;
    }
    cout << "name is :" << endl << mid->name << endl << " id is:" << mid->id << endl<<"score is :" << mid->sco << endl;
    return 0;
}
参考一下吧 注释的那句导致的程序异常退出;
但是我之前使用了strcpy也发生了错误,似乎是在输入一开始的字符串就出错了,就是自动终止了程序
回复 点赞
自信男孩 2018年03月27日
strcpy_s时注意有三个参数,除了目标串和源串,还要加上拷贝字节数。 建议从网上搜一下strcpy_s的用法。
回复 点赞
自信男孩 2018年03月27日
#include<iostream>
#include <cstring>
using namespace std;

struct link {
    char name[100];
    int id;
    double sco;
    link *next;
};

int main()
{
    link *head, *p,*q,*mid;
    int n, i;
    head = p = new link;
    cout << "please enter the student's number." << endl;
    cin >> n;
    for (i = 0;i < n + 1; i++)//一个个输入数据
    {
        q = new link;
        //q = p->next;   //导致异常退出。因为q指向了NULL,因此下面的输入有问题。
        cout << "please enter the " << i << " student's name,id and score in order.";
        cin>> q->id >> q->sco;
        cin.getline(q->name, 100);    /*这儿应该是q->name,不是p->name*/
        p->next = q;   //将新节点加入链表
        p = q;    //修改尾节点
    }
    mid = new link;//定义一个新的储存节点
    p = head->next;
    double score=0;
    for (i = 0;i < n + 1;i++)
    {
        if (p->sco > score)//比较大小
        {
            score = p->sco;
            //strcpy_s(mid->name, p->name); //字符赋给一个链表节点
            strcpy(mid->name, p->name);
            mid->id = p->id;
            mid->sco = p->sco;
        }
        p = p->next;
    }
    cout << "name is :" << endl << mid->name << endl << " id is:" << mid->id << endl<<"score is :" << mid->sco << endl;
    return 0;
}
参考一下吧 注释的那句导致的程序异常退出;
回复 点赞
陈伯伯啊 2018年03月27日

这个是错误的图片
编译没有错误。。
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告