Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Bisogno di aiuto su un programma in C!!!

    Ragazzi ho da poco finito di completare questo programma che non fa altro che creare una lista concatenata semplice di stringe e stamparla. Il programma termina quando mettete il carattere 0, il mio problema sta nel fatto che se metto parole inferiori a 4 lettere funziona perfettamente ma se metto ad esempio "nonno" la o me la stampa male come se non la riconoscesse. Ringrazio in anticipo ogni aiuto.

    codice:
    # include <stdio.h>
    # include <stdlib.h>
    # include <string.h>
    
    typedef struct L1
    {
        char dato;
        struct L1 *next;
    } L;
    
    L *crealista();
    void visualizzalista(L *p);
    
    int main()
    {
        L *l;
        l=crealista();
        visualizzalista(l);
    
    }
    
    L *crealista()
    {
        L *p,*punt;
        int m=2;
        printf("Inserisci la 1 stringa: ");
        p=(L*)malloc(sizeof(L)*10);
        scanf("%s",&p->dato);
        punt=p;
        while(punt->dato!='0')
        {
            punt->next=(L*)malloc(sizeof(L));
            punt=punt->next;
            printf("Inserisci la %d stringa: ",m);
            scanf("%s",&punt->dato);
            m++;
        }
        punt->next=NULL;
        return (p);
    }
    
    void visualizzalista(L *p)
    {
        printf("lista");
        while(p!=NULL)
        {
    	 printf("-->");
    	 printf("%s",&p->dato);
             p=p->next;
        }
    printf("\n");
    }

  2. #2
    la variabile dato, presente all'interno della struttura L, è semplicemente un char, quindi non adatto a contenere stringhe.
    hai bisogno di un array di char, ad esempio
    codice:
    char dato[10];
    ti permette di acquisire una stringa di 10 caratteri, compreso il terminatore.

  3. #3
    si ci avevo pensato anche io pero facendo in questo modo al momento dell'immissione del carattere 0 il programma non termina piu....

  4. #4
    devi usare
    codice:
    while(strcmp("0", p->dato) != 0)

  5. #5
    no non funziona cmq il programma non riconosce lo 0 per terminare
    Ps: ti ringrazio per il tuo aiuto

  6. #6
    un minimo di iniziativa

    codice:
    # include <stdio.h>
    # include <stdlib.h>
    # include <string.h>
    
    typedef struct L1
    {
        char dato[10];
        struct L1 *next;
    } L;
    
    L *crealista();
    void visualizzalista(L *p);
    
    int main()
    {
        L *l;
        l=crealista();
        visualizzalista(l);
    
    }
    
    L *crealista()
    {
        L *p,*punt;
        int m=2;
        printf("Inserisci la 1 stringa: ");
        p=(L*)malloc(sizeof(L));
        scanf("%s", p->dato);
        punt=p;
        while(strcmp("0", punt->dato) != 0)
        {
            punt->next=(L*)malloc(sizeof(L));
            punt=punt->next;
            printf("Inserisci la %d stringa: ",m);
            scanf("%s",punt->dato);
            m++;
        }
        punt->next=NULL;
        return (p);
    }
    
    void visualizzalista(L *p)
    {
        printf("lista");
        while(p!=NULL)
        {
    	 printf("-->");
    	 printf("%s",p->dato);
             p=p->next;
        }
    printf("\n");
    }

  7. #7
    Intanto ti ringrazio un casino per l'aiuto datomi e ti chiedo scusa per l la mia ignoranza ma non riesco a capire perche togliendogli & ,che se non erro è l'indirizzo a cui fa capo, funzioni...se puoi gentilmente spiegarmi ti ringrazio di tutto.

  8. #8
    molto semplicisticamente: scanf necessita dell'indirizzo della locazione di memoria in cui si vuole salvare il dato.
    - se devi salvare un valore in un char, essendo un tipo primitivo, devi passarne l'indirizzo mediante l'utlizzo di &
    - l'identificativo di un array, invece, è già un puntatore (in questo caso ad un char) ad una locazione di memoria, devi dunque passarlo direttamente alla funzione
    ah, scusami se ti sono sembrato scontroso

  9. #9
    no figurati anzi non so come ringraziarti.

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.