#include<stdio.h>
#include<stdlib.h>
struct node {
long num;
float score;
struct node* next;
} node;
void creat(){
node* head=(node*)malloc(sizeof(node));
head->num = 0;
head->score = 0;
node* p = head;
do {
node* newNode = (node*)malloc(sizeof(node));
scanf("%ld,%f", newNode->num, newNode->score);
newNode->next = NULL;
p->next = newNpde;
p = p->next;
} while (newNode->num);
return head;
}
void printNode(node* head) {
node* p = head;
while (p != NULL) {
printf("%ld%f", p->num, p->score);
p = p->next;
}
}
void del(node* head){
int val;
scanf("%ld", val);
node* p = head->next;
node* prev = head;
while (p != NULL) {
if (p->num = val) {
prev->next = p->next;
free(p);
break;
}
else {
prev = p;
p = p - >next;
}
}
}
void insert(node* head){
node* newNode = (node*)malloc(sizeof(node));
newNode->next = NULL;
int n;
scanf("%ld%f%d", &newNode->num, &newNode->score,&n);
p = head;
for (int i = 1; i <= n, i++) {
p = p->next;
if (i ==n)
{
newNode->next = p->next;
p->next = newNode;
}
}
}
int main()
{ creat(head);
del(head);
insert(head);
printfNode(head);
return 0;
}
我快要废了,谁来帮帮我
10101,90.0
10102,88.5
10103,95.0
10104,93.5
10105,88.0(输入数据)
0(输入结束)
10101(删除数据)
10106,98.0(插入数据)
2(插入位置)
代码我给你调通了,很多都是语法问题,这个希望你再精进一下你的语言能力,先上结果
首先是你的creat函数,你是一个void类型的函数怎么可以有返回值呢,这种当然你用void也可以,但是你必须往creat函数里面传入一个头节点,不然你在这个函数里面对头节点进行的操作都保存不下来啊,函数结束你创建的东西都找不到了,再就是你像我一样,把你的create函数改成一个有返回值类型的,返回一个node指针类型,当然你定义结构体的时候你要用到typedef,不然你的node只是一个结构体的成员,你是不能用他来表示结构体的
还有一个是do-while语句里的scanf,你在输入值的时候就必须告诉程序你这个值要输入到哪里,所以必须加取地址符,不然就会发生错误
还有do-while语句的判断条件,实际上我也比较好奇,但是我现在可能无法解释,就是while的判断条件不能在do-while里面定义,不然电脑发现不了这个变量,可能电脑在执行的时候不管你do-while里面是什么样子,但是这个while判断条件要单独处理吧,你这个时候把你的条件变量定义在do-while里面计算机就发现不了你定义过这个变量,所以我用while给你改了一个下面是我修改好的代码,供你参考
#include<stdio.h>
#include<stdlib.h>
typedef struct node {
long num;
float score;
struct node* next;
} node;
node* creat(){
node* head=(node*)malloc(sizeof(node));
head->num = 0;
head->score = 0;
node* p = head;
while(1)
{
node* newNode = (node*)malloc(sizeof(node));
scanf("%ld%f", &newNode->num, &newNode->score);
if(newNode->num == 0)
{
break;
}
newNode->next = NULL;
p->next = newNode;
p = p->next;
}
// do {
// node* newNode = (node*)malloc(sizeof(node));
// scanf("%ld,%f", &newNode->num, &newNode->score);
// newNode->next = NULL;
// p->next = newNode;
// p = p->next;
// }while(newNode->num);
return head;
}
void printNode(node* head) {
node* p = head->next;
while (p != NULL) {
printf("\n%ld %f\n", p->num, p->score);
p = p->next;
}
}
void del(node* head){
long val;
scanf("%ld", &val);
node* p = head->next;
node* prev = head;
while (p != NULL) {
if (p->num == val) {
prev->next = p->next;
free(p);
break;
}
else {
prev = p;
p = p ->next;
}
}
}
void insert(node* head){
node* newNode = (node*)malloc(sizeof(node));
newNode->next = NULL;
int n;
scanf("%ld%f%d", &newNode->num, &newNode->score,&n);
node* p = head;
for (int i = 1; i <= n; i++) {
p = p->next;
if (i ==n)
{
newNode->next = p->next;
p->next = newNode;
break;
}
}
}
int main()
{
node* head;
head = creat();
del(head);
insert(head);
printNode(head);
return 0;
}
你直接说遇到啥问题了,我博客有一篇C++写的带头节点的单向链表。