node *modification(node *h){//修改订单 node *s,*r; if(h==NULL) { h=malloc(sizeof(node)); h->next=NULL; r=h; } else{ r=h; while(r->next!=NULL) r=r->next; } s=malloc(sizeof(node)); printf("名称:"); scanf("%s",s->data.name); printf("增加时间:"); scanf("%lf",&s->data.time); printf("类型:"); scanf("%d",&s->data.type); r->next=s; r=s; r->next=NULL; return h; } void xiugai(node *s){//修改订单 while(s->next!=NULL){ s=s->next; printf("名称:"); printf("%s\n",&s->data.name); printf("增加时间:"); printf("%s\n",&s->data.time); printf("手机尾号:"); printf("%s\n",&s->data.useful); printf("类型:"); printf("%s\n",&s->data.type); } }这段代码插入上一段中是否会存在问题
时间: 2024-03-23 07:41:16 浏览: 138
char* ps="abc";
这段代码存在一些问题。具体问题如下:
1. 函数`modification`的定义中,应该在参数列表中指明参数的类型,例如`node *modification(node *h)`应该改为`node* modification(node* h)`,这样更符合C语言的函数定义规范。
2. 函数`modification`中,如果链表`h`为空,则应该先为其分配一个头结点,然后将新节点插入到头结点之后,代码中已经实现了这个逻辑。
3. 函数`modification`中,将新节点插入到链表的末尾,代码中已经实现了这个逻辑。
4. 函数`xiugai`中,应该将链表头节点的数据忽略掉,否则第一个节点的数据将没有被输出。
5. 函数`xiugai`中,输出节点数据时,应该使用`s->data.name`,`s->data.time`等成员变量,而不是`&s->data.name`,`&s->data.time`等成员变量的地址。
6. 函数`xiugai`中,输出节点数据的格式应该和输入时一致,例如名称应该用`%s`而不是`%lf`。
7. 函数`xiugai`中,输出节点数据时,应该先输出提示信息,再等待用户输入数据,代码中已经实现了这个逻辑。
综上所述,修改后的代码如下:
```
node* modification(node* h) {
node *s, *r;
if (h == NULL) {
h = malloc(sizeof(node));
h->next = NULL;
r = h;
} else {
r = h;
while (r->next != NULL)
r = r->next;
}
s = malloc(sizeof(node));
printf("名称:");
scanf("%s", s->data.name);
printf("增加时间:");
scanf("%lf", &s->data.time);
printf("类型:");
scanf("%d", &s->data.type);
r->next = s;
r = s;
r->next = NULL;
return h;
}
void xiugai(node* s) {
printf("修改订单:\n");
while (s->next != NULL) {
s = s->next;
printf("名称:%s\n", s->data.name);
printf("增加时间:%lf\n", s->data.time);
printf("类型:%d\n", s->data.type);
}
}
```
阅读全文