Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C] File di testo a vettore

    Scusatemi potreste dirmi come passare gli oggetti di un file di testo (x es. 20 30, comunque dei numeri o altro) a un vettore in modo ke li immagazzini e io possa per esempio utilizzarli o farne una somma del tipo somma+=v[i]??
    attendo risposte con ansia...grazie a tutti

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Non sai come aprire un file e leggerne il contenuto?

    Utilizza la fopen e la fscanf ... prova ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    allora sisi so come usare fopen fclose fscanf fprintf ecc ecc, ma non so come (per dirlo terra terra) prendere gli elementi di un file .txt e metterli in un vettore x esempio:

    file prova.txt:
    "20 30 40 50 60<eoln>
    13 14 87 54.5<eoln>
    <EOF>"

    vorrei sapere come trasportare i numeri in un vettore. xk mentr con le variabili char o stringhe uso la funzione "fgetc", cn i numeri interi o float non so come fare...

  4. #4
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    bhè scusa hai detto tu stesso che sai usare fprintf() e fscanf()!?!?!?!?!?
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  5. #5
    allora mi fai vedere come si fa xk io provando a fare cosi non me li immagazina...scusate sono principiante... :master: forse sbaglio qualcosa io ora vi posto per esempio del codice

    #include <stdio.h>
    #define max 2000


    int main () {

    FILE *prova;
    int v[max];
    int i;

    prova=fopen("prova.txt","r");


    if(prova!=NULL){
    for(i=0;i<EOF;++i)
    fscanf(prova,"%d",v);
    for(i=0;i<max;i++)
    printf("%c",v[i]);


    fclose(prova); }
    else printf("il file non si può aprire\n");


    getche ();
    return 0;
    }

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Dato che i valori sono con la virgola, devi usare un vettore di float e non di int

    float v[max];

    Inoltre il ciclo for non ha senso ... questo e' il ciclo corretto all'interno della if

    codice:
    	if(prova!=NULL)
    	{
    		i=0;
    
    		fscanf(prova,"%f", &v[i]);
    
    		while(!feof(prova))
    		{
    			printf("%f\n",v[i++]); 
    			fscanf(prova,"%f", &v[i]);
    		}
    
    		fclose(prova); 
    	}
    Studialo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    codice:
    for(i=0;i<EOF;++i)
    fscanf(prova,"%d",v);
    for(i=0;i<max;i++)
    printf("%c",v[i]);
    bhè ci sono parecchi errori eh....iniziamo dal for():
    1) la condizione di terminazione non può essere i<EOF...non ha senso...poi non puoi incrementare ++i...si incrementa i++...che sono due cose differenti!
    2) fscanf(prova,"%d",&v[i]), si utilizza come la scanf() normale, quando leggi un carattere per volta o un intero devi mettere l'& davanti!
    3) infine quando vai a stampare, non puoi ciclare fino a max, perchè non è detto che il vettore contenga 200 elementi!! se ne contiene solo 3 vai a stampare cose che nn c'entrano! poi se leggi degli interi, non puoi andare a stampare con il %c....
    bhè ci sono un pò d errori di sintassi base direi! ripassati qualcosa da un buon libro, come il deitel&deitel per esempio, che da una buona base secondo me!
    comunque ti posto la lettura corretta! e cerca di capire cosa fa!
    file input:
    codice:
    file prova.txt:
    "20 30 40 50 60<eoln>
    13 14 87 54<eoln>
    <EOF>"
    codice:
    #include <stdio.h>
    #define max 2000
    
    int main () {
    
    FILE *prova;
    int v[max];
    int i, dimensioneVet;
    
    prova=fopen("prova.txt","r");
    if(prova!=NULL){
      
      i=0;
      while ( fscanf(prova,"%d", &v[i]) != EOF ) {
            i++;
      }
      fclose(prova); 
      dimensioneVet = i;
      
      for ( i=0; i<dimensioneVet; i++ ) {
          printf ("%d ", v[i]);
      }
    }
    else printf("il file non si può aprire\n");
    
    
    getche ();
    return 0;
    }
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  8. #8
    grazie x l'aiuto ke m avete dato kiedo scusa x gli errori ke ho fatto ma era la prima volta ke provavo a fare operazioni su di un file d testo e ,nè il mio libro nè il professore sn stati molto kiari a proposito ...
    "E' giunta l'ora, amiche care, ormai di chiacchierar, di cappellini di chiffon di cavoli o di re, di come il mare va in bollor se i gatti san volar"

  9. #9
    Per controllare la fine del file si usa la feof()
    Devi usare un valore intero dove memorizzare in numero effettivo dei valori letti (non è detto che sia sempre uguale al numero massimo prestabilito)
    In fase di lettura del vettore devi considerare solo l'effettivo numero di dati inseriti.
    codice:
    #include <stdio.h>
    
    #define MAX 2000
    
    int main (void)
    {
    	FILE  *fp;
    	float  v[MAX];
    	int    max, i;
    
    	fp = fopen("prova_int.txt","r");
    
    	if( NULL!=fp)
    	{
    		for(max=0; !feof(fp) && max<MAX; max++)
    			fscanf(fp, "%f", &v[max]);
    
    		for(i=0; i<max; i++)
    			printf("%f\n", v[i]);
    
    		fclose(fp);
    	}
    	else
    		printf("il file non si può aprire\n");
    
    	getchar ();
    	return 0;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da MrX87 ...
    Scusa, solo per chiarezza e per non confondere ulteriormente carloekekko ... ma hai provato il codice che hai suggerito ?

    Oltre al fatto che alcuni suggerimenti non sono del tutto corretti ...

    ad esempio

    ++i e i++, in molti casi si equivalgono ...

    quando leggi un carattere per volta o un intero ... non e' vero che devi mettere & davanti ... dipende da tante cose ...

    ... e non sta leggendo degli interi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.