Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: [C++] Puntatore a file

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636

    Puntatore a File

    ciao a tutti
    avrei un quesito.

    scrivo un file .txt inserendo dei dati da tastiera e poi lo chiudo..fin qui tutto ok.
    poi riapro il file per leggerlo ma il puntatore mi punta all'ultimo elemento che ho scritto nello stesso file prima di chiuderlo...come posso fare ad azzerarlo in modo tale da farlo puntare al primo elemento del file (che devo leggere) ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    Posto il codice cosi è più chiaro

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define N 6
    /*
     *
     *
     *
     *
     */
    
    
    int main() {
    
        int numero, num, pos, media;
        int i = 0;
        int j = 0;
        int V[N];
    
        struct risultato{
            int pos;
            float med;
        }risultati[N];
    
        FILE *cfPtr; /*cfPtr = punta al file ingresso.txt*/
    
    
        /*scrive il file*/
        if ((cfPtr = fopen("appello.txt", "w")) == NULL){
            printf ("Il file non può essere aperto");
        }
    
        else{
            printf ("Inserisci i numeri del vettore : \n");
            printf ("Inserisci EOF per terminare l'inserimento \n");
            scanf ("%d", &numero);
    
    	while (!feof(stdin)){
                scanf ("%d", &numero);
    
            }
    
    
    
             fclose(cfPtr);
    	}
    
    
             printf ("Inserisci il numero da cercare : \n");
             scanf ("%d", &num);
    
    
    
            /*fopen apre il file*/
        if ((cfPtr = fopen("appello.txt", "r")) == NULL){
            printf ("Il file non può essere aperto");
        }
        else{
    
            fscanf (cfPtr, "%d", &numero);
            V[i] = numero;
            i++;
    
             while (!feof(cfPtr)){ 
                fscanf (cfPtr, "%d", &numero);
                 V[i] = numero;
                 i++;
    
                 for (i = 0; i < N; i++){
                    if (num = numero){
                            risultati[i].pos = i;
                            risultati[i].med = (float)(V[i-1]*V[i+1])/2;
                        }
    
                    }
                 printf ("Posizione del numero : %d", risultati[i].pos);
                 printf ("Media : %.2f", risultati[i].med);
    
    
    
    
                }
             fclose(cfPtr);
    
            }
    
    
    
        return 0;
    }
    il debug si ferma all'istruzione in rosso..perchè legge solo l'ultimo elemento del file scritto in precedenza e quindi poi trova ctrl-z e si ferma...come mai il puntatore punta all'ultimo elemento e non al primo?

  3. #3
    Apri il file in scrittura, ma poi lo chiudi senza averci mai scritto nulla. Quindi non c'e' nulla da leggere quando vai a rileggerlo.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    infatti ho dimenticato la fprintf..ecco il codice

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define N 6
    /*
     *
     *
     *
     *
     */
    
    
    int main() {
    
        int numero, num, pos, media;
        int i = 0;
        int j = 0;
    	int k = 0;
        int V[N];
    
        struct risultato{
            int pos;
            float med;
        }risultati[N];
    
        FILE *cfPtr; /*cfPtr = punta al file ingresso.txt*/
    
    
        /*scrive il file*/
        if ((cfPtr = fopen("appello.txt", "w")) == NULL){
            printf ("Il file non può essere aperto");
        }
    
        else{
            printf ("Inserisci i numeri del vettore : \n");
            printf ("Inserisci EOF per terminare l'inserimento \n");
            scanf ("%d", &numero);
    
    	while (!feof(stdin)){
    			fprintf (cfPtr, "%d\n", numero);
                scanf ("%d", &numero);
    
            }
    
    
    
             fclose(cfPtr);
    	}
    
    
             
    
    
    
            /*fopen apre il file*/
        if ((cfPtr = fopen("appello.txt", "r")) == NULL){
            printf ("Il file non può essere aperto");
        }
        else{
    
            fscanf (cfPtr, "%d", &numero);
            V[i] = numero;
            i++;
    
             while (!feof(cfPtr)){
                fscanf (cfPtr, "%d", &numero);
                 V[i] = numero;
                 i++;
             }
              fclose(cfPtr);
    
    	}
    
    		printf ("Inserisci il numero da cercare : \n");
             scanf ("%d", &num);
    
    			k = 0;
                 for (j = 0; j < i - 1; j++){
                    if (num == V[j]){
                            risultati[j].pos = k;
                            risultati[j].med = (float)(V[k-1]+ V[k+1])/2;
    				printf ("Posizione del numero : %d\n", risultati[j].pos);
    			 printf ("Media : %.2f", risultati[j].med);
                        }
    			 
    				k++;
                    }
    
    	
                 return 0;
    }
    ho notato una cosa strana con visual c++, cioè eseguendo il debug passo passo mi stampa le ultime 2 printf con i risultati..mentre se vado in esecuzione normale...alla fine mi chiede la finestra senza mostarmi i risultati..come mai?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    ho risolto con

    system("PAUSE");

    ma non so se sia normale

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma COSA hai risolto e DOVE l'hai inserito?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    codice:
    
    #include <stdio.h>
    #include <stdlib.h>
    #define N 6
    /*
     *
     *
     *
     *
     */
    
    
    int main() {
    
        int numero, num;
        int i = 0;
        int j = 0;
    	int k = 0;
        int V[N];
    
        struct risultato{
            int pos;
            float med;
        }risultati[N];
    
        FILE *cfPtr; /*cfPtr = punta al file appello.txt*/
    
    
        /*scrive il file*/
        if ((cfPtr = fopen("appello.txt", "w")) == NULL){
            printf ("Il file non può essere aperto");
        }
    
        else{
            printf ("Inserisci i numeri del vettore : \n");
            printf ("Inserisci EOF per terminare l'inserimento \n");
            scanf ("%d", &numero);
    
    	while (!feof(stdin)){
    			fprintf (cfPtr, "%d\n", numero);
                scanf ("%d", &numero);
    
            }
    
    
    
             fclose(cfPtr);
    	}
    
    
    
    
    
    
            /*fopen apre il file*/
        if ((cfPtr = fopen("appello.txt", "r")) == NULL){
            printf ("Il file non può essere aperto");
        }
        else{
    
            fscanf (cfPtr, "%d", &numero);
            V[i] = numero;
            i++;
    
             while (!feof(cfPtr)){
                fscanf (cfPtr, "%d", &numero);
                 V[i] = numero;
                 i++;
             }
              fclose(cfPtr);
    
    	}
    
    		printf ("Inserisci il numero da cercare : \n");
                    scanf ("%d", &num);
    
                 k = 0;
                 for (j = 0; j < i - 1; j++){
                    if (num == V[j]){
                            risultati[j].pos = k;
                            risultati[j].med = (float)(V[k-1]+ V[k+1])/2;
    			printf ("Posizione del numero : %d\n", risultati[j].pos);
    			printf ("Media : %.2f\n", risultati[j].med);
                        }
    
    		k++;
                    }
    
                 system("PAUSE");
                 return 0;
    }

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    La riga che hai indicato non risolve alcun problema di scrittura nel file ... quindi, non vedo cosa c'entri con quello che hai detto fino ad ora ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define N 6
    /*
     *
     *
     *
     *
     */
    
    
    int main() {
    
        int numero, num;
        int i = 0;
        int j = 0;
    	int k = 0;
        int V[N];
    
        struct risultato{
            int pos;
            float med;
        }risultati[N];
    
        FILE *cfPtr; /*cfPtr = punta al file appello.txt*/
    
    
        /*scrive il file*/
        if ((cfPtr = fopen("appello.txt", "w")) == NULL){
            printf ("Il file non può essere aperto");
        }
    
        else{
            printf ("Inserisci i numeri del vettore : \n");
            printf ("Inserisci EOF per terminare l'inserimento \n");
            scanf ("%d", &numero);
    
    	while (!feof(stdin)){
    	    fprintf (cfPtr, "%d\n", numero); /*scrivo singolo dato sul file*/
                scanf ("%d", &numero);
    
            }
    
    
    
             fclose(cfPtr);
    	}
    
    
    
    
    
    
            /*fopen apre il file*/
        if ((cfPtr = fopen("appello.txt", "r")) == NULL){
            printf ("Il file non può essere aperto");
        }
        else{
    
            fscanf (cfPtr, "%d", &numero);
            V[i] = numero;
            i++;
    
             while (!feof(cfPtr)){
                fscanf (cfPtr, "%d", &numero);
                 V[i] = numero;
                 i++;
             }
              fclose(cfPtr);
    
    	}
    
    		printf ("Inserisci il numero da cercare : \n");
                    scanf ("%d", &num);
    
                 k = 0;
                 for (j = 0; j < i - 1; j++){
                    if (num == V[j]){
                            risultati[j].pos = k;
                            risultati[j].med = (float)(V[k-1]+ V[k+1])/2;
    			printf ("Posizione del numero : %d\n", risultati[j].pos);
    			printf ("Media : %.2f\n", risultati[j].med);
                        }
    
    		k++;
                    }
    
                 system("PAUSE");
                 return 0;
    }

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301

    Moderazione

    Originariamente inviato da jurij7
    Puntatore a File
    Il linguaggio nel titolo è obbligatorio.

    jurij7, se continui a non inserirlo, le prossime discussioni verranno chiuse d'ufficio, senza ulteriori spiegazioni.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.