使用c++; 我有一个C++实现的链表,我想在插入数据值之后搜索。用户会提示要搜索的记录。但是,搜索功能未按预期工作,它会不断返回“未找到匹配项”。有什么问题吗 struct node{ char name[60]; char admission[10]; char grade; node *next; }; node* search(node* head){ node *temp=head; char name[60]; cout << "Enter Student to search :"; cin.ignore(10000, '\n'); cin.getline(name, 60); cout << name; while (temp!=NULL){ if(strcmp(temp->name, name)==0){ cout << "Match found"; return temp; } temp = temp->next; } cout << "No match found"; return NULL; } int main(){ node *head = NULL; char name[60]; char admission[10]; char grade; node *temp; temp = (node*)malloc(sizeof(node)); int i=0; while(i<2){ cout << "Enter students name: "; cin.ignore(10000, '\n'); cin.getline(name, 60); cout << "Enter student's admission number: "; cin.getline(admission, 10); cout << "Enter student's grade :"; cin >> grade; strcpy(temp->name, name); strcpy(temp->admission,admission); temp->grade = grade; head = temp; i++; } search(head); return 0; } struct节点{ 字符名[60]; 字符输入[10]; 煤焦品位; 节点*下一步; }; 节点*搜索(节点*头){ 节点*温度=头部; 字符名[60]; 你能用错误的方法复制名字吗 strcpy(name, temp->name);
应该是使用c++; 我有一个C++实现的链表,我想在插入数据值之后搜索。用户会提示要搜索的记录。但是,搜索功能未按预期工作,它会不断返回“未找到匹配项”。有什么问题吗 struct node{ char name[60]; char admission[10]; char grade; node *next; }; node* search(node* head){ node *temp=head; char name[60]; cout << "Enter Student to search :"; cin.ignore(10000, '\n'); cin.getline(name, 60); cout << name; while (temp!=NULL){ if(strcmp(temp->name, name)==0){ cout << "Match found"; return temp; } temp = temp->next; } cout << "No match found"; return NULL; } int main(){ node *head = NULL; char name[60]; char admission[10]; char grade; node *temp; temp = (node*)malloc(sizeof(node)); int i=0; while(i<2){ cout << "Enter students name: "; cin.ignore(10000, '\n'); cin.getline(name, 60); cout << "Enter student's admission number: "; cin.getline(admission, 10); cout << "Enter student's grade :"; cin >> grade; strcpy(temp->name, name); strcpy(temp->admission,admission); temp->grade = grade; head = temp; i++; } search(head); return 0; } struct节点{ 字符名[60]; 字符输入[10]; 煤焦品位; 节点*下一步; }; 节点*搜索(节点*头){ 节点*温度=头部; 字符名[60]; 你能用错误的方法复制名字吗 strcpy(name, temp->name);,c++,c,linked-list,C++,C,Linked List,应该是 strcpy(temp->name, name); 首先到达目的地: 调试的一个好方法是打印您所做的所有比较 (另外,我认为这是学习代码而不是生产代码,因为它充满了缓冲区溢出漏洞。)strcpy似乎受到了重新评价 应该是 strcpy(临时->名称,名称); strcpy(临时->入学,入学) 由于未执行temp->next=NULL;,程序也可能以崩溃告终。插入代码确保列表只有一个节点。该节点的数据将被覆盖以存储最后输入的数据。这就是搜索操作失败的原因 您的插入需要做的是: 为
strcpy(temp->name, name);
首先到达目的地:
调试的一个好方法是打印您所做的所有比较
(另外,我认为这是学习代码而不是生产代码,因为它充满了缓冲区溢出漏洞。)strcpy似乎受到了重新评价 应该是 strcpy(临时->名称,名称); strcpy(临时->入学,入学)
由于未执行temp->next=NULL;,程序也可能以崩溃告终。插入代码确保列表只有一个节点。该节点的数据将被覆盖以存储最后输入的数据。这就是搜索操作失败的原因 您的插入需要做的是:
next
指针设置为NULL!这样做将避免在您最不期望的时候调用未定义的行为temp
,它指向头节点。不要为此节点分配内存。这样做=内存泄漏下一个指针
temp->next
指向步骤5中分配的节点temp
移动到步骤5中分配的节点(通过temp=temp->next
)strcpy(destination, source);
我建议你读一下这本书,以便更清楚地理解
此外,为什么不使用new
而不是malloc
?#包括
#include <iostream>
#include <cstring>
using namespace std;
#define NAME_SIZE 60
#define ADMI_SIZE 10
struct node{
char name[NAME_SIZE];
char admission[ADMI_SIZE];
char grade;
node *next;
};
node* search(node* head){
node *temp=head;
char name[NAME_SIZE];
cout << "Enter Student to search :";
cin.getline(name, NAME_SIZE);
cout << name;
while (temp!=NULL){
if(strcmp(temp->name, name)==0){
cout << " Match found";
return temp;
}
temp = temp->next;
}
cout << " No match found";
return NULL;
}
void drop(node* n){
if(n == NULL) return;
drop(n->next);
delete n;
}
int main(){
node *head = NULL;
char name[NAME_SIZE];
char admission[ADMI_SIZE];
char grade;
int i=0;
while(i<2){
cout << "Enter students name: ";
cin.getline(name, 60);
cout << "Enter student's admission number: ";
cin.getline(admission, 10);
cout << "Enter student's grade :";
cin >> grade;
cin.ignore(10000, '\n');
node *temp = new node;
strcpy(temp->name, name);
strcpy(temp->admission,admission);
temp->grade = grade;
temp->next = head;
head = temp;
i++;
}
search(head);
drop(head);
return 0;
}
#包括
使用名称空间std;
#定义名称\u大小60
#定义行政单位大小10
结构节点{
字符名称[名称大小];
字符许可[ADMI_SIZE];
煤焦品位;
节点*下一步;
};
节点*搜索(节点*头){
节点*温度=头部;
字符名称[名称大小];
cout品位=品位;
温度->下一步=头部;
压头=温度;
i++;
}
搜查(头部);
下降(头);
返回0;
}
除I/O之外,这主要是C,而不是C++——这就是你真正想要的。你的插入是不正确的。是的,除了SERVERH()操作之外,一切都很好。你的插入函数只是替换了其中的一个元素。您从来没有超过1个元素。每次执行“head=temp;”时,插入的元素肯定是不正确的,因此您的列表只是创建的最后一个元素。+1忽略了这一点。他也只为整个循环分配一个节点并覆盖它。@JoachimIsaksson这也是真的。我根据上面给出的更正编辑了代码。请指引我在代码中的其他错误…我是C++中的NOOB)