PDA

Visualizza la versione completa : [C] lista errore in stampa


Kandalf
25-05-2004, 12:19
questa la scruct della lista

struct tel {
long num;
char nome;
struct tel *next;
};

questa la stampa


void stampa(tel *p)
{
if (p == NULL)
printf("\nFine\n");
else {
printf("%ld ", p->num);
printf("%s ", p->nome);
stampa(p->next);
}
}

nn capisco xch mi da un segmentation quando c' un elemento.
se vuote funziona.

anx721
25-05-2004, 13:00
inizializzi correttamente la struct? posta il codice

Kandalf
25-05-2004, 14:14
lungo...



#include <stdio.h>
#include <stdlib.h>
#include "rub.h"

void menu()
{
printf("\n\nKandalf Rubric 0.1\n\n");
printf("1. Inserisci nuovo contatto\n");
printf("2. Cancella un contatto\n");
printf("3. Cancella tutto\n");
printf("4. Ricerca un contatto\n");
printf("5. Visualizza tutti\n");
printf("0. Esci\n");
}


tel *crea(tel *p, char nome, long num)
{

if (p == NULL)
{
p = malloc(sizeof(p));
p->num = num;
p->nome = nome;
p->next = NULL;
}
return p;
}


void stampa(tel *p)
{
if (p == NULL)
printf("\nFine\n");
else {
printf("%ld ", p->num);
printf("%s ", p->nome);
stampa(p->next);
}
}

main()
{
tel *puntLista;
puntLista = NULL;

int ins;
char nome;
long num;

menu();

do {

scanf("%d", &ins);


switch (ins) {

case 1:
printf("Nome\n");
scanf("%s", &nome);
printf("Numero\n");
scanf("%ld", &num);
puntLista = crea(puntLista, nome, num);
break;

case 2:
printf("canc\n");
break;

case 3:
printf("elim\n");
break;

case 4:
printf("cerc\n");
break;

case 5:
stampa(puntLista);
break;

default:
printf("Opzione non valida riprova\n");
break;

}

menu();

} while (ins != 0);
}

Kandalf
25-05-2004, 14:14
ancora incompleto per ora si puo' inserire un unico contatto

anx721
25-05-2004, 14:22
un errore sicuramemte questo nella dichiarazione della struct:

char nome;


sostituiscelo con:

char nome[100];

e modifica analogamente le altre dichiarazioni di nome, vedi se funge

Kandalf
25-05-2004, 20:32
ho provato mi d errore e il segmentation...cosa potr essere?

anx721
25-05-2004, 20:56
Ecco il codice funzionante, crea(...) permette di inserire anche piu di un elemento:



#include <stdio.h>
#include <stdlib.h>
#include "rub.h"


//struct tel {
// long num;
// char *nome;
// struct tel *next;
//};


void menu()
{
printf("\n\nKandalf Rubric 0.1\n\n");
printf("1. Inserisci nuovo contatto\n");
printf("2. Cancella un contatto\n");
printf("3. Cancella tutto\n");
printf("4. Ricerca un contatto\n");
printf("5. Visualizza tutti\n");
printf("0. Esci\n");
}


tel *crea(tel *p, char nome[], long num)
{
if (p == NULL)
{
p = (tel *)malloc(sizeof(tel));
p->num = num;
p->nome = nome;
p->next = NULL;
return p;
}
tel *temp = p;
while(temp -> next != NULL)
temp = temp -> next;
temp -> next = (tel *)malloc(sizeof(tel));
temp = temp -> next;
temp -> num = num;
temp -> nome = nome;
temp -> next = NULL;
return p;
}


void stampa(tel *p)
{
if (p == NULL)
printf("\nFine\n");
else {
printf("\n%ld ", p->num);
printf("%s ", p->nome);
stampa(p->next);
}
}

int main()
{
tel *puntLista;
puntLista = NULL;

int ins;
char *nome;
long num;

menu();

do {

scanf("%d", &ins);


switch (ins) {

case 1:
printf("Nome\n");
nome = (char *)malloc(100 * sizeof(char));
scanf("%s", nome);
printf("Numero\n");
scanf("%ld", &num);
puntLista = crea(puntLista, nome, num);
break;

case 2:
printf("canc\n");
break;

case 3:
printf("elim\n");
break;

case 4:
printf("cerc\n");
break;

case 5:
stampa(puntLista);
break;

default:
printf("Opzione non valida riprova\n");
break;

}

menu();

} while (ins != 0);
return 0;
}

Kandalf
25-05-2004, 22:36
ciao ho dovuto usare kompare (fichissimo) per capire dove sbagliavo


cmq perch fai lo scanf senza la & a nome? xch un puntatore e l'indirizzo nn serve? nn potevo farlo senza un puntatore?

questi sono cast?
p = (tel *)malloc(sizeof(tel));

anx721
25-05-2004, 22:44
la scanf vuole l'indirizzo della variabile, e 'nome', essendo un puntatore, gia esso stesso l'indirizzo della variabile.

Si quelli sono dei cast, non necessario far i cast in c, ma io uso il compilatore c++ che obbliga a fare i cast esplicitamente, e comuqnue una buona regola di programmazione farli perch evita errori.

Kandalf
25-05-2004, 22:45
com' nn usi gcc?

cmq a che servono i cast?
a dire la verit nn mi piacciono molto lo trovo + pulito senza

Loading