Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    9

    Errori e warning che non so risolvere

    Ciao a tutti!
    Devo scrivere un programma in linguaggio ANSI C che prenda in input il nome di un file contenente delle mosse di scacchi (per esempio BIANCO E5 E6) e che sposti queste mosse in una coda implementata come lista. Dopodichè devo contare il numero di mosse (cioè misurare la lunghezza della lista) e scrivere su un file output indicato dall'utente il numero di mosse fatte e i pezzi mangiati per il nero e per il bianco.
    Il mio problema sono le funzioni append (inserimento in coda) e pop, oltre a quella della lunghezza della lista.

    L'errore che mi dà è sempre lo stesso: "request for member ‘next’ in something not a structure or union"
    perciò posto solo una delle funzioni così da alleggerire la visione spero mi possiate dare una mano, io non ne vengo fuori!
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<malloc.h> 
    
    /*apro il file input*/
    char buf[10000];
    FILE*f;
    int len;
    char finput;
    char foutput;
    
    int input()
    { 
      FILE *f;
      printf("inserisci il nome del file input\n");
      scanf("%c", &finput);
      f=fopen("%c", "r");
      /*  se volessi stamparlo a video dovrei aggiungere:
          while (fscanf(f,"%s",buf)>0)   
          printf("%s", buf);*/
      fclose(f);
      return 0;
    }
    /*leggo input e implemento la coda come una lista*/
    /* Implemento il tipo liststring*/
    struct liststring {
      char *str;
      struct liststring* next;
    };
    
    typedef struct liststring** Liststring;
    
    /* Inserimento in coda*/ 
    int append(Liststring *l, char *elem)
    {
      if(*l==NULL){
        (*l) = (Liststring) malloc(sizeof(struct liststring)); 
    	if(*l){
    		(*l)-> next = NULL;
    		(*l)-> str = elem; 
    		return 1;
    	}
    	else 
    		return 0;
        } 
      else 
       return append(((*l)-> next), elem);
    }
    spero di aver scritto nell'area giusta, scusatemi in caso!

  2. #2
    Il parametro l è di tipo Liststring *, ovvero è un triplo puntatore a struct liststring; ergo, dovresti scrivere (**p)->next, anche se mi pare molto strano che effettivamente ti serva un triplo puntatore... più probabilmente quello che volevi fare era ricevere un parametro di tipo Liststring (ovvero un doppio puntatore a struct liststring).
    Tra l'altro, quel typedef è decisamente poco chiaro - sia perché segnalare giusto con una maiuscola che si tratta di un doppio puntatore mi pare un po' pochino, sia perché nascondere puntatori in dei typedef in genere non è una buona idea.

    Incidentalmente, il linguaggio di riferimento va sempre indicato nel titolo (sotto forma di "tag"), ora provvedo io ad aggiungerlo, in futuro ricordatene.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2013
    Messaggi
    9
    Grazie mille! si in effetti non avevo alcuna intenzione di usare un triplo puntatore, il problema è che non li ho capiti bene ma devo assolutamente consegnare questo progetto entro domani sera quindi mi sono un po' ingegnata per far venir fuori qualcosa! Ora ho corretto e tutto funziona! Domando ancora perdono per non aver scritto nel titolo il nome del linguaggio, giuro solennemente che non accadrà più eheheh

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 © 2026 vBulletin Solutions, Inc. All rights reserved.