Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    49

    [C]lettura file. Dove sbaglio?

    Devo leggere un file con questo contenuto:

    8
    3 4 -1
    5 -1
    7 4 8 -1
    -1
    6 -1
    7 2 -1
    -1
    4 7 -1

    che passo a questo prgramma
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #include "grafi.h"
    
    int main(int argc, char *argv[]){
    
    
    FILE *fpin;
    char * nomeFile;
    char tmp[80];
    char *tokptr;
    int nV=0;
    
    grafo *G;
    int v1;
    int i;
    
    
    	if(argc!=2){
    		printf("Utilizzo: %s nomefile\n", argv[0]);
    		return -1;
    	}
    	nomeFile=argv[1];
    	 if((fpin=fopen(nomeFile,"r"))==NULL){
    
          printf("ERRORE APERTURA FILE \"%s\"\n", argv[1]);
    
         return -1;
    
        }
    
    	printf("File APERTO\n");
    
    	/*Legge numero vertici*/
     	fscanf(fpin, "%d\n", &nV);
    
    	printf("Numero di vertici: %d", nV);
    	G = grafoInit( nV ) ;
    	for(i=1; i<=nV; i++){
    		fgets(tmp, 80, fpin);
    		tokptr=strtok(tmp, " ");
    		while(strcmp(tmp, "-1")!=0){
    			grafoAddEdge(G, i, atoi(tokptr));
    			tokptr=strtok(NULL, " ");
    		}
    	}
    
    	grafoPrint( G ) ;
    	return 0;
    }
    l'errore è in
    codice:
    fscanf(fpin, "%d\n", &nV);
    help!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Con quell'istruzione leggi un numero intero seguito da un A_CAPO. E non mi sembra il tuo caso, visto l'esempio...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: [C]lettura file. Dove sbaglio?

    l'errore è in
    codice:
    fscanf(fpin, "%d\n", &nV);
    help!
    Di quale errore parli?

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    49
    Segmentation fault (core dumped) è l'errore.
    Se faccio


    codice:
    fscanf(fpin, "%s", tmp);
    dichiarando tmp come
    codice:
    char *tmp;
    Legge la riga, ma poi come faccio a mettere il numero letto in nV che è un intero?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da xglobusx
    Segmentation fault (core dumped) è l'errore.
    Se faccio


    codice:
    fscanf(fpin, "%s", tmp);
    dichiarando tmp come
    codice:
    char *tmp;
    Legge la riga, ma poi come faccio a mettere il numero letto in nV che è un intero?
    Stai facendo un po' di confusione, perche' questa riga non c'e' nel codice che avevi proposto. Anzi, avevi detto che era quest'altra

    fscanf(fpin, "%d\n", &nV);

    che ti dava errore.

    Per capirci, la

    fscanf(fpin, "%d\n", &nV);

    va bene e leggi il valore 8 nella variabile nV.

    Invece, la riga

    fscanf(fpin, "%s", tmp);

    non va bene perche' tmp deve puntare ad una stringa "allocata" ... se utilizzi solamente un puntatore senza allocare lo spazio, ovviamente avrai un segmentation fault.
    Devi scrivere

    char tmp[80];
    fscanf(fpin, "%s", tmp);

    Pero', ti ripeto, la prima riga che avevi fornito

    fscanf(fpin, "%d\n", &nV);

    (e che dicevi che ti dava errore) funziona regolarmente.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    49
    la seconda è una modifica che ho fatto per provare un'altra soluzione.
    hai ragione la prima funziona, non è li l'errore, ma dopo, a quanto pare qua:
    printf("Numero di vertici: %d", nV);

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    49
    ora funziona.grazie

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.