Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C] lista errore in stampa

    questa è la scruct della lista
    codice:
    struct tel {
    	long num;
    	char nome;
    	struct tel *next;
    };
    questa è la stampa

    codice:
    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.
    live free or die

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    inizializzi correttamente la struct? posta il codice

  3. #3
    è lungo...


    codice:
    #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);
    }
    live free or die

  4. #4
    è ancora incompleto per ora si puo' inserire un unico contatto
    live free or die

  5. #5
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    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

  6. #6
    ho provato mi dà errore e il segmentation...cosa potrà essere?
    live free or die

  7. #7
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Ecco il codice funzionante, crea(...) permette di inserire anche piu di un elemento:

    codice:
    #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;
    }

  8. #8
    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));
    live free or die

  9. #9
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    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.

  10. #10
    com'è nn usi gcc?

    cmq a che servono i cast?
    a dire la verità nn mi piacciono molto lo trovo + pulito senza
    live free or die

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.