Visualizzazione dei risultati da 1 a 5 su 5

Discussione: problema di liste in c

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    20

    problema di liste in c

    Ho un problema con le liste....vi posto il codice...
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>

    typedef struct nodo{
    char cognome[20];
    char nome[20];
    char telefono[20];
    struct nodo *succ;
    }agenda;

    int main()
    {
    agenda *k, *pun;
    FILE *rubrica;
    int count = 0;


    if ((rubrica = fopen("agenda.txt", "r")) == NULL)
    //rubrica = fopen("agenda.txt","r")
    //if (rubrica == NULL)
    {
    printf("Il File che stai cercando di aprire non esiste\n");
    }
    else
    {
    k = (agenda *)malloc(sizeof(agenda));
    if(k==NULL)
    {
    printf("Memoria esaurita\n");
    }
    else
    {
    fscanf(rubrica,"%s",k->cognome);
    fscanf(rubrica,"%s",k->nome);
    fscanf(rubrica,"%s",k->telefono);
    pun = k;
    count++;
    while(!feof(rubrica))
    {
    pun->succ = (agenda *)malloc(sizeof(agenda));
    pun = pun->succ ;
    fscanf(rubrica,"%s",pun->cognome);
    fscanf(rubrica,"%s",pun->nome);
    fscanf(rubrica,"%s",pun->telefono);
    count++;
    //printf("Nome: %s\t Cognome: %s\t Telefono: %s\t\n",k->nome,k->cognome,k->telefono);

    }
    pun->succ = NULL;
    printf("Numero di record trovati: %d\n",count);
    pun = k;
    int i;
    char vettore;
    //vettore=(char *)malloc(sizeof((char *20) * count);
    /*do*/for(i=1;i<=count;i++)
    {
    printf("\nNome: %s\t Cognome: %s\t Telefono: %s\t",pun->nome,pun->cognome,pun->telefono);

    pun=pun->succ;
    }//while(pun->succ != NULL);

    }
    }
    fclose(rubrica);
    printf("\n");
    system("PAUSE");
    return 0;
    }


    Secondo voi....come mai se uso il for mi stampa tutte le righe del file altrimenti me ne stampa tutte meno l'ultima???? (il for lo uso perchè ho contato quanto ne ho lette)

    Seconda domanda....dovessi io salvare in un vettore i cognomi per poterne fare una ricerca tipo dicotomica come dovrei fare?
    Nel senso come faccio a fare una variaible che sia un vettore di stringhe????
    Forse posso creare una struct con solo il campo cognome e farne un vettore di struct???? non so...è un'idea sbagliata forse....help...

    grazie per l'aiuto....

  2. #2
    Ad occhio, direi che

    codice:
    while(pun->succ != NULL);
    va sostituito con

    codice:
    while(pun != NULL);
    dato che nel do...while hai assegnato a pun l'elemento successivo (pun->succ)


    EDIT: dimenticavo l'altra domanda. utilizza dei puntatori a puntatori.
    Qui ad esempio creo un vettore di 10 stringhe. Ogni stringa può contenere 80 caratteri.

    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>

    #define N 10
    #define SIZE 80

    int main()
    {
        
    char** strs = (char**)malloc(sizeof(char*) * N);
        for(
    int i 0Ni++)
        {
            
    strs[i] = (char*)malloc(sizeof(char) * SIZE);
            
    charvalue "HELLO";
            
    strcpy(strs[i], value);
        }
            
        for(
    int i 0Ni++)
            
    printf(">> %s <<\n"strs[i]);
            
        for(
    int i 0Ni++)
            
    free(strs[i]);
        
    free(strs);
        
        return 
    0;


  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    20
    bella.....si è vero....non me ne ero accorto e persistevo nell'errore.....grande....
    sai darmi qualche sugg anche per la seconda parte della mia domanda...???

    Te la rispego brevemente
    Una volta che ho letto dal file cognome nome e telefono e li ho inseriti in una lista
    avrei bisogno di ordinarli e quindi ho bisogno di un vettore di struct giusto????

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    20
    ah capperi non avevo visto che mi avevi già risposto...
    mmmmmm
    ora io devo essere sincero....quella roba non l'ho mai vista.....ma credo di averci capito....non moltissimo...ma sbattendoci il muso...come del resto da quando ho preso in mano un pc faccio....ehehe....dovrei essere in grado di usarle come mi servono....

    l'unica cosa è che non sapevo si potessero usare dei tipi di dato stringa in c....non mi risultava dalle varie guide che avevo letto....
    cmq grazie...sei un grande....

  5. #5
    In realtà non esiste un tipo di dato stringa in C. Utilizzi un puntatore a caratteri.
    Nell'esempio che ti ho postato, utilizzo l'allocazione dinamica della memoria e, ovviamente, se non l'hai mai vista può risultare difficile da comprendere, ma poi ci fai l'abitudine.
    In quel caso, puoi liberare e riallocare memoria come ti pare e piace. Ad esempio puoi utilizzare un array di 5 stringhe, poi liberare la memoria e utilizzarle uno di 10 stringhe (lo stesso con la dimensione delle stringhe).

    Se le dimensione sono fisse, puoi fare così, rimandando ad un altro momento la comprensione della gestione dinamica della memoria:

    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>

    #define N 3
    #define SIZE 80

    int main()
    {
        
    char strs[N][SIZE];
        
        for(
    int i 0Ni++)    
        {
            
    printf("[input]>> ");
            
    gets(strs[i]);        
        }
        
        
    printf("\n");
        
        for(
    int i 0Ni++)
            
    printf("[output]<< %s\n"strs[i]);
        
        return 
    0;

    Come prima, solo che qui le dimansioni sono fisse.

    Tornando alle stringhe, guarda questo esempio:

    Codice PHP:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main()
    {
        
    charstr "c++";
        
        while(*
    str)
        {
            
    putchar(*str);
            
    str++;
        }
        
        return 
    0;

    Come noterai, str è un puntatore

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.