다음 연결된 목록 코드에 문제가 있습니다. 그러나 무엇인지 모르겠습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있을까요? 나는이 코드를 레코드를 업데이트하는 좀 더 큰 코드에서 사용하지만 "새 레코드 만들기"섹션에는 도달하지 못합니다. 마치 주 코드가 헤드 포인터를 업데이트하는 것처럼 보이므로 항상 유리한 비교가됩니다.연결된 목록이 제대로 작동하지 않습니다. 머리가 대신 업데이트됩니다.
미리 감사드립니다. 나는 문제가 무엇인지 파악하려고 노력하면서 내 머리를 깎아 내고 있었다. 내가 함께 메인에서이 전화 드렸습니다
struct l_list *find_name(const char *name)
{
struct l_list *tmp=0;
if(records==0) { // First record
head=new l_list;
head->name=name;
head->next=0;
tail=head;
records++;
return head;
}
else {
tmp=head;
while(tmp!=0)
{
if(!std::strcmp(tmp->name,name))
{
cout << "Returning existing record with value: " << tmp->number << " name:" << tmp->name << endl;
return tmp;
}
tmp=tmp->next;
}
// No first and no existing records
cout << "Creating new record" << endl;
tail->next=new l_list;
tail=tail->next;
tail->name=name;
tail->next=0;
records++;
return tail;
}
: 구조체 기록 * TMP = find_name ("최대");
다음 :
tmp->number=1;
을 심지어 이름 업데이트 : 내가 구조체를 일단
tmp=find_name("Eva");
내가 지금처럼 업데이트에 문자열을 전달하여 그래서
tmp->name="Peter";
을 이 함수는 새 레코드를 만들어 반환하거나 기존 레코드를 제공하고 반환합니다. 문제는 출력에서 분명하지 않을 수도 있지만 메인 (for;) 루프에 넣으면 이 엉망이됩니다. 다음과 같이
구조체는 다음과 같습니다
struct records {
const char *name;
struct records *next;
}
관련 프로그램 코드는 다음과 같습니다
struct record {
const char *name;
struct record *next;
};
struct record *head;
struct record *tail;
struct record *find_name(const char *name)
{
struct record *tmp=0;
if(record_count==0) { // First record
cout << "Creating first record" << endl;
head=new record;
head->name=name;
head->next=0;
tail=head;
record_count++;
return head;
} else {
tmp=head;
while(tmp!=0) {
if(!std::strcmp(tmp->name,name)) {
cout << "Returning existing record with value: " << "name: " << name << "tmp->name: " << tmp->name << endl;
return tmp;}
tmp=tmp->next;
}
// No first and no existing records
cout << "Creating new record" << endl;
tail->next=new record;
tail=tail->next;
tail->name=name;
tail->next=0;
record_count++;
return tail;
}
}
int main(int argc, const char *argv[])
{
struct record *tmp=0;
if(something is true) {
//Return or create a new user
tmp=find_name("Peter");
} else {
tmp=find_name("Unknown"); // Hold 1 unknown person in database
}
}
나는 그대로하지만 난 큰 부분에서 추출했다가 컴파일 가능한 아니다 알고있다.
디버거를 사용하여 코드를 단계별로 실행하는 방법을 배워야 할 수도 있습니다. 좋은 디버거를 사용하면 한 줄씩 프로그램을 실행하고 예상 한 곳에서 벗어난 곳을 볼 수 있습니다. 프로그래밍을 할 때 필수적인 도구입니다. 추가 읽기 : ** [작은 프로그램을 디버깅하는 방법] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver
std :: list ? 아니면 허용되지 않습니까? – stefaanv
당신이 언급 한 문제를 보여주는 방식으로 이것을 사용하는 코드를 게시하십시오. – molbdnilo