Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    9

    c++ errore stampa file binario

    codice:
    #include <stdio.h> 
    #include <stdlib.h> 
    typedef struct{ 
    int id; 
    int numeroprod; 
    float spesa; }Id; 
    int main(){ 
    int i,ide; 
    Id transazione={0,0,0}; 
    FILE *fptr; fptr=fopen("./transazioni.dat","wb"); 
    if(fptr==NULL){ printf("errore\n"); } 
    else { 
    for(i=0;i<100;i++)
    {
    fwrite(&transazione,sizeof(Id),1,fptr); } 
    fclose(fptr); 
    }
    fptr=fopen("./transazioni.dat","ab+"); 
    if(fptr==NULL){ printf("errore\n"); } 
    else { 
    printf("inserisci id\n(da 1 a 100 ,0 per uscire)\n"); 
    scanf("%d",&transazione.id); 
    while (transazione.id != 0){ 
    printf("inserisci quantità e spesa\n");      //fscanf(stdin,"%d%d%f",&transazione.id,&transazione.numeroprod,&transazione.spesa); fscanf(stdin,"%d%f",&transazione.numeroprod,&transazione.spesa); 
    fseek(fptr,(transazione.id -1) * sizeof(Id),SEEK_SET); 
    fwrite(&transazione, sizeof(Id),1,fptr); 
    printf("inserisci id\n(da 1 a 100 ,0 per uscire)\n"); 
    scanf("%d",&transazione.id); } 
    fclose(fptr); } 
    fptr=fopen("./transazioni.dat","rb"); 
    if(fptr==NULL){ printf("errore\n"); } 
    else { 
    while(!feof(fptr)) 
    { 
    fread(&transazione, sizeof(Id),1,fptr); 
    if(transazione.id != 0){
    printf("inserisci id desiderato\n"); 
    scanf("%d",&ide); 
    if(transazione.id == ide)
    { 
    printf("%d %d %f\n",transazione.id,transazione.numeroprod,transazione.spesa); //printf("%d\n",transazione.id); 
    }
     }
     } 
    fclose(fptr); 
    } 
    system("PAUSE"); 
    return 0; }
    il seguente programma deve acquisire dei record e poi stampare a video i record con l'id richiesto, il programma funziona solo che devo inserire due volte l'id...
    ovvero fa due volte la printf scanf di ide;
    credo il problema sia nella condizione !feof(fptr) perchè in una versione precedente(uguale senza la richiesta dell id) mi stampava due volte l'ultimo record, solo che ho provato a modificarla con altre varianti fino all'EOF ma sempre con scarsi risultati.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quando mostri il codice questo deve essere correttamente indentato altrimenti non si capisce nulla e non si può rispondere ... (per il futuro, se aprirai altre richieste in questo modo, almeno personalmente, non le leggerò proprio ...).

    In generale, come impostazione del ciclo è meglio scrivere

    codice:
    fread ...
    
    ciclo con feof ...
    
        ... gestione della riga letta ...
    
       fread ...
    fine ciclo
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    9
    chiedo scusa per il testo indentato male..

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.