Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    5

    [C/C++]: Leggere 3 numeri alla volta da un file!!!

    Ciao ragazzi, potreste aiutarmi a risolvere questo problema, x favore?

    "Scrivere un programma che legge da un file di testo denominato "dati.txt"
    tre numeri interi per volta, li somma e stampa il risultato a video. Il file
    "dati.txt" contiene un numero di elementi multiplo di 3. "

    Il problema è che non so come fare a fargli leggere 3 numeri alla volta!!!
    Aiutatemi x favore !!!

    Grazie

    Fabio

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746
    potresti usare fscanf, ad esempio...

  3. #3
    Ma quanti 3d hai creato ?

    Potresti usare la fscanf()

    es:

    int val1, val2, val3;
    fscanf( fp, "%d", &val1);
    fscanf( fp, "%d", &val2);
    fscanf( fp, "%d", &val3);

    e poi sommi i tre valori.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746
    int val1, val2, val3;
    fscanf( fp, "%d", &val1);
    fscanf( fp, "%d", &val2);
    fscanf( fp, "%d", &val3);


    fscanf(fp, "%d%d%d", &val1, &val2, &val3);


  5. #5
    Originariamente inviato da U-bahn


    fscanf(fp, "%d%d%d", &val1, &val2, &val3);

    Le preferisco separate, permettono una gestione degli errori più accurata,
    del tipo : Manca il secondo valore intero, oppure manca il terzo...
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    5
    Eh ma così è troppo facile!!! In questo modo legge i primi tre elementi del file...il programma invece chiede di leggere i primi tre file e farne la somma, poi leggere dal 4° al 6° file e farne la somma, e cosi via (ovviamente senza sapere a priori da quanti elementi è formato il file (l'importante è che sia un multiplo di 12)).
    Se riuscite a risolverlo così...vi ringrazio davvero!!!
    Ciao
    Fabio

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746
    Eh ma così è troppo facile!!! In questo modo legge i primi tre elementi del file...il programma invece chiede di leggere i primi tre file e farne la somma


    codice:
    #include <stdio.h>
    #include <assert.h>
    
    int main(int argc, char **argv)
    {
    	int	n1, n2, n3;
    	FILE	*fdat;
    
    	assert(argc == 2);
    	fdat = fopen(argv[1], "r");	
    	assert(fdat != NULL);
    
    	while (fscanf(fdat, "%d%d%d", &n1, &n2, &n3) == 3) {
    		printf("%5s%4d%5s%4d%5s%4d%6s%4d\n",
    			"N1:", n1, "N2:", n2, 
    			"N3:", n3, "Sum:", n1 + n2 + n3);
    	}
    
    	if (fclose(fdat) != 0)
                    return 1;
    	return 0;
    }

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    5
    Grazie 1000!!!
    Potresti però spiegarmi a parole il meccanismo in:
    while (fscanf(fdat, "%d%d%d", &n1, &n2, &n3) == 3) {
    printf("%5s%4d%5s%4d%5s%4d%6s%4d\n",
    "N1:", n1, "N2:", n2,
    "N3:", n3, "Sum:", n1 + n2 + n3);

    Non ho capito molto bene come funziona..dopo che ha fatto la somma dei primi tre numeri, come fa a riniziare dal 4° e sommare fino al 6° e così via?
    Se me lo puoi spiegare a parole....davvero grazie

    Fabio

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    5
    Originariamente inviato da U-bahn


    codice:
    #include <stdio.h>
    #include <assert.h>
    
    int main(int argc, char **argv)
    {
    	int	n1, n2, n3;
    	FILE	*fdat;
    
    	assert(argc == 2);
    	fdat = fopen(argv[1], "r");	
    	assert(fdat != NULL);
    
    	while (fscanf(fdat, "%d%d%d", &n1, &n2, &n3) == 3) {
    		printf("%5s%4d%5s%4d%5s%4d%6s%4d\n",
    			"N1:", n1, "N2:", n2, 
    			"N3:", n3, "Sum:", n1 + n2 + n3);
    	}
    
    	if (fclose(fdat) != 0)
                    return 1;
    	return 0;
    }
    Non capisco bene cosa fa soprattutto (perchè ==3?) nel while e nella printf contenuta nel while...%5s%4d...cosa significano?
    Scusa l'ignoranza, ma ti prego fammi capire!!!
    Grazie ancora
    Fabio

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    746
    questo:

    codice:
    while (fscanf(fdat, "%d%d%d", &n1, &n2, &n3) == 3) {
    		printf("%5s%4d%5s%4d%5s%4d%6s%4d\n",
    			"N1:", n1, "N2:", n2, 
    			"N3:", n3, "Sum:", n1 + n2 + n3);
    	}
    significa:

    codice:
    finchè fscan restituisce un valore pari a 3 
                    stampa "N1: n1 N2: n2 N3: n3 Sum: n1+n2+n3"
    Il valore di ritorno di fscanf ha un significato ben preciso:
    se stai studiando su di un libro, quasi certamente questo contiene
    la spiegazione delle varie funzioni della libreria standard.
    Il suo utilizzo con == 3 garantisce che siano letti 3 numeri
    convertibili a int; così se, ad esempio, il file contiene
    13 numeri, l'ultimo viene sì letto, ma il ciclo non viene eseguito.

    Nella printf %5s significa: il parametro corrispondente deve
    essere stampato come se fosse una stringa, con un campo
    di caratteri pari a 5; %4d vuol dire la stessa cosa, solo
    che il parametro corrispondente viene stampato come un int
    e con un campo di 4 caratteri.
    Per farti capire:

    codice:
    printf("%10s%10s%10s", "Hello", "world", "!!!");
    stampa:
         Hello     world       !!!

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.