Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    99

    [C] problema con fscanf

    ciao a tutti, sto cercando di leggere dei nomi da un file .txt che sono scritti in tale maniera:
    codice:
    "MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER"
    (sono alcuni solo per esempio, ce ne sono più di 5000 nel file )
    ecco cosa ho scritto:
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main(void)
    {
    	char name[15];
    	FILE *cPtr;
    	if((cPtr=fopen("names.txt","r"))==NULL) puts("File could not be opened!");
    	else{
    		fscanf(cPtr,"%*[^A-Z]",name);
    		
    		while(!feof(cPtr)){
    			puts(name);
    			fscanf(cPtr,"%*[^A-Z]",name);
    		}
    		fclose(cPtr);
    	}
    	return 0;
    }
    in input dovrebbero uscire i nomi, ma escono dei cuoricini
    nello fscanf ho provato inoltre a fare
    codice:
    fscanf(cPtr,"\"%s\",",name);
    ma mi da errore durante l'esecuzione
    qualche dritta? grazie in anticipo

    EDIT:
    anche scrivendo così rispettivamente il primo fscanf e il secondo fscanf scrive cuoricini:
    codice:
    fscanf(cPtr,"\"%[\"]",name); fscanf(cPtr,"\",\"%[\"]",name);
    provato ad usare sia puts() che printf() perchè il problema sembra essere nello scrivere i valori acquisiti (ad occhio le fscanf dovrebbero essere giuste)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dovrebbe essere

    fscanf(cPtr, "\"%[^\"]\",", name);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    99
    Funziona, grazie mille!

    EDIT:
    funziona si, ma termina al penultimo e non all'ultimo nome, sarà perchè non c'è la virgola
    EDIT 2:
    annullo ciò che ho scritto, funziona perfettamente, mancava il puts() fuori dal ciclo while è ora di andare a dormire hehe
    grazie ancora!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Secondo me il ramo else potrebbe essere semplicemente

    codice:
    {
        while(fscanf(cPtr,"\"%[^\"]\",",name)==1)
            puts(name);
    
        fclose(cPtr);
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    99
    ancora meglio, non avevo minimamente considerato l'idea di usare il ritorno di queste funzioni

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