Lista in C - [Errore] Primary Expression before ""

di il
9 risposte

Lista in C - [Errore] Primary Expression before ""

Salve a tutti sto programmando una lista in C dove mi visualizzi da file (read) una cartella.txt dove ci sono diversi nomi associati a un'età affianco no? Vorrei capire innanzitutto se il ragionamento ha senso per come l'ho strutturata io la lista e poi perché mi evidenzia su DEV :
Errori evidenziati:
>[Error] expected primary-expression before 'newal' <
>[Error] expected unqualified-id before '=' token<

File di testo allievi.txt contiene :
Luigi 22
Marco 18
Marica 24

E che poi dia la possibilità all'utente di digitare 'n' (visualizzare il cognome) o 'e' (visualizzare l'età) //

Ora vi lascio anche qui il codice così che possiate aiutarmi perché non riesco ad arrivarci.. e tra non molto avrei l'esame sulle liste in C.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct alunni{
		char nome[15];
		int eta;
		struct alunni *next;
	};
	
typedef struct alunni al;
typedef al *a;


int c_insert(al **top, char scelta);

int c_insert(a *top){
	FILE *fp;
	a *newal;
	
	if((fp=fopen("allievi.txt","r"))==NULL)
		printf("Errore apertura del file\n");
	else{
		while(!feof(fp)){
		newal=(a*)malloc(sizeof(a));
		fscanf(fp,"%s %d", a newal->nome a &newal->eta);
		printf("(%s,%d)-->", a newal->nome a newal->eta);
		a = a->next;
		top = newal;
	}
}
		fclose(fp);
}

int main(){
	a p_lista = NULL;
	char scelta;
	printf("Scegliere n o e?");
	scanf("%s",&scelta);
	
	c_insert(&p_lista,scelta);
	return (0);
	
}

Grazie e buona giornata a tutti!

9 Risposte

  • Re: Lista in C - [Errore] Primary Expression before ""

    Ma cosa hai scritto nella fscanf e nella fprintf ?
  • Re: Lista in C - [Errore] Primary Expression before ""

    Non ho fatto alcuna fprintf ho soltanto messo a video con un printf per far sì che mi visualizzasse la lista, così facendo poi ho messo i puntatori di riferimento
  • Re: Lista in C - [Errore] Primary Expression before ""

    Si volevo scrivere fscanf e printf ... Come hai scritto gli argomenti??
  • Re: Lista in C - [Errore] Primary Expression before ""

    Che intendi per argomenti? scusami un attimo l'incomprensione
  • Re: Lista in C - [Errore] Primary Expression before ""

    La parte in grassetto

    fscanf(fp,"%s %d", a newal->nome a &newal->eta);
    printf("(%s,%d)-->", a newal->nome a newal->eta);
  • Re: Lista in C - [Errore] Primary Expression before ""

    Ah qui praticamente avevo indicato che il puntatore "a newal" puntasse al nome e poi con &newal->eta (per riferirmi all'età e ho usato una & commerciale per stabilire che era un intero e non so se dovevo metterlo anche a quello precedente perché fa da riferimento all'intera funzione e non al tipo di variabile assegnata. Comunque poi la printf semplicemente mi stampava ciò che diceva restituendo la linked-list come la voleva il mio professore. Quindi non so come risolverla.. so solo che ora ho modificato mettendo soltanto così il codice e mi da lo stesso errore:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct alunni{
    	char nome[15];
    	int eta;
    	struct alunni *next;
    };
    
    typedef alunni al;
    typedef al a;
    
    int c_insert(a *top,char scelta);
    
    int c_insert(a *top, char scelta){
    	FILE *fp;
    		a *newal;
    			if((fp=fopen("allievi.txt","r"))==NULL)
    				printf("Errore di apertura FILE\n");
    					else{
    			while(!feof(fp)){
    				newal=(a*)malloc(sizeof(a));
    					fscanf(fp, "%s %d", &newal->nome &newal->eta);
    						printf("(%s , %d)->", newal->nome newal->eta);
    							newal=newal->next;
    								top=newal;
    		}
    	}
    
    	fclose(fp);
    }
    
    int main(){
    	a *p_lista = NULL;
    	char scelta;
    	printf("Scegliere n o e?");
    	//scanf("%s, &scelta);
    	if(scelta=='n' || scelta=='e'){
    		printf("%s\n");
    	}else{
    		printf("%d\n");
    	}
    	c_insert(p_lista ,scelta);
    	return(0);
    }
  • Re: Lista in C - [Errore] Primary Expression before ""

    Scusa, ma continuo a non capire le tue scelte sintattiche ...

    printf("%s\n");

    printf("%d\n");

    che fanno secondo te? Per me sono completamente inutili/sbagliate.

    Come se tu non avessi completamente le basi del linguaggio.
  • Re: Lista in C - [Errore] Primary Expression before ""

    Doveva semplicemente dire che stampava il primo elemento del file txt e facendo %s specificavo che era la stringa, ovvero il nome dell'alunno.
    Poi con il %d stampare la sua età associata. Volevo interpretarla in tal modo perché se facevo %c era possibile che mi stampasse soltanto il primo carattere e non il nome completo in sé. Non so se mi spiego
  • Re: Lista in C - [Errore] Primary Expression before ""

    No, non ti spieghi.

    Sai come lavora la funzione printf?
    Oltre al tipo di dato (%s o %d) devi anche passare come argomento il dato che vuoi visualizzare!
    Dov'è il nome o l'età da visualizzare nelle printf ??

    E poi, nelle

    fscanf(fp, "%s %d", &newal->nome &newal->eta);
    printf("(%s , %d)->", newal->nome newal->eta);

    perché non utilizzi la virgola tra gli argomenti che passi?
Devi accedere o registrarti per scrivere nel forum
9 risposte