Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - ciao a tutti problema con i file
Forum - C/C++ - ciao a tutti problema con i file

Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 21:59
Mercoledì, 02/12/2009
Io ho la seguente pseudocodifica e devo scrivere il programma in c sapeta aiutarmi?

inizio
fp<-apri("listino.dat",scrittura);
registra
chiudi(fp)
fp<-apri("listino.dat",lettura);
stampa
chiudi(fp)
fine


funz registra


inizio
esegui
chiedi(descrizione)
leggi(articolo.descrizione)
chiedi(prezzo)
leggi(articolo.prezzo)
scrivi(articolo,fp)
chiedi(elenco finito?)
leggi(risposta)
ripeti mentre(risposta=="no")
fine


finz stampa

inizio
leggi(articolo,fp)
mentre(fine file(fp)==false) esegui
scrivi(stampante,articolo.descrizione,articolo.prezzo)
leggi(articolo,fp)
ripeti
fine




il programma sotto è ciò che sn riusciyto a fare ma nn funziona questi sn gli errori potete aiutarmi?

documents and settings\utente\documenti\visual studio 2008\projects\project1\file new\file new\file new.cpp(19) : error C3861: 'registra': identificatore non trovato
1>c:\documents and settings\utente\documenti\visual studio 2008\projects\project1\file new\file new\file new.cpp(20) : error C2665: 'fclose': nessuno dei 2 overload potrebbe convertire tutti i tipi di argomenti
1>        c:\programmi\microsoft visual studio 9.0\vc\include\stdio.h(202): potrebbe essere 'int fclose(FILE *)'
1>        c:\programmi\microsoft visual studio 9.0\vc\include\stdio.h(202): o 'int fclose(FILE *)'
1>        durante la ricerca di corrispondenza con l'elenco di argomenti '(const char [12])'
1>c:\documents and settings\utente\documenti\visual studio 2008\projects\project1\file new\file new\file new.cpp(22) : error C3861: 'stampa': identificatore non trovato
1>c:\documents and settings\utente\documenti\visual studio 2008\projects\project1\file new\file new\file new.cpp(23) : error C2665: 'fclose': nessuno dei 2 overload potrebbe convertire tutti i tipi di argomenti
1>        c:\programmi\microsoft visual studio 9.0\vc\include\stdio.h(202): potrebbe essere 'int fclose(FILE *)'
1>        c:\programmi\microsoft visual studio 9.0\vc\include\stdio.h(202): o 'int fclose(FILE *)'
1>        durante la ricerca di corrispondenza con l'elenco di argomenti '(const char [12])'
1>c:\documents and settings\utente\documenti\visual studio 2008\projects\project1\file new\file new\file new.cpp(34) : error C2664: 'gets': impossibile convertire il parametro 1 da 'std::string' a 'char *'
1>        Nessun operatore di conversione definito dall'utente è disponibile o è impossibile chiamare l'operatore
1>c:\documents and settings\utente\documenti\visual studio 2008\projects\project1\file new\file new\file new.cpp(47) : error C2664: 'feof': impossibile convertire il parametro 1 da 'const char [12]' a 'FILE *'
1>        I tipi a cui si punta sono privi di relazioni. La conversione richiede reinterpret_cast, cast di tipo C o cast di tipo funzione
1>c:\documents and settings\utente\documenti\visual studio 2008\projects\project1\file new\file new\file new.cpp(47) : fatal error C1903: impossibile recuperare l'errore o gli errori precedenti. Interruzione della compilazione
1>Il log di compilazione è stato salvato in 'file://c:\Documents and Settings\Utente\Documenti\Visual Studio 2008\Projects\Project1\file new\file new\Debug\BuildLog.htm'
1>file new - 7 errore/i, 1 avviso/i
========== Compilazione: 0 completate, 1 non riuscite,

Codice sorgente - presumibilmente C++

  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <iostream>
  5. using namespace std;
  6. struct merce
  7. {
  8.         string descrizione;
  9.         int prezzo;
  10. };
  11. merce elenco_di_articoli;
  12. merce articolo;
  13. FILE *fp,*fopen(),*fclose();
  14. void main()
  15. {
  16.         fp=fopen("listino.txt","w");
  17.         registra();
  18.         fp=fclose("listino.txt");
  19.         fp=fopen("listino.txt","r");
  20.         stampa();
  21.         fclose("listino.txt");
  22. system("pause");
  23. }
  24.  
  25.  
  26. void registra()
  27. {
  28.         int risp;
  29.         do
  30.         {
  31.                 cout<<"inserisci descrizione:"<<endl;
  32.             gets(articolo.descrizione);
  33.                 cout<<"inserisci prezzo :"<<endl;
  34.                 cin>>(articolo.prezzo);
  35.                 cout<<"elenco finito?[0,1]"<<endl;
  36.                 cin>>risp;
  37.    }
  38.    while(risp!=0);
  39.  
  40.         //fwrite(articolo,fp);
  41. }
  42. void stampa()
  43. {
  44.         //fread(
  45.         while(feof("listino.txt")==false)
  46.         {
  47.                 fwrite(stampante,articolo.descrizione,articolo.prezzo);
  48.                 fread();
  49.         }
  50. }


PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 22:29
Mercoledì, 02/12/2009
tanto per cominciare, fopen e fclose sono due funzioni, quindi mi spieghi perché le hai messe tra le variabili?
Oltretutto una variabile scritta con due tonde alla fine non esiste da nessuna parte quindi è evidente che non hai capito niente su come si dichiara una variabile.

poi se la funzione registra la scrivi dopo il main ne devi mettere il prototipo PRIMA del main

metterai quindi prima del main

void registra();

e tutto il resto...

PM Quote
Avatar
Zonzo (Ex-Member)
Rookie


Messaggi: 34
Iscritto: 21/04/2008

Segnala al moderatore
Postato alle 1:02
Martedì, 05/01/2010
Diciamo ch il codice era quasi tutto sbagliato.
Adesso ti appiccico il codice sorgente modificato con qualche commento che ti indica grosso modo gli errori, e dato che ormai è tardi in un altro momento ti scrivo in maniera più dettagliata gli errori che hai commesso.
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. struct merce
  8. {
  9.     char descrizione[40]; // In C una stringa non è altro che un array di caratteri
  10.     int  prezzo;            // e va dichiarato come char dato che string non esiste
  11. };
  12.  
  13. merce articolo;
  14.  
  15. void registra(FILE *pointer);      //Se vuoi sviluppare le tue funzioni dopo il main
  16. void stampa(FILE *pointer);        //prima devi almeno dichiarare il loro prototipo
  17.  
  18. int main()
  19. {
  20.     FILE *fp;             //fopen() e fclose() sono funzioni e non puntatori
  21.     fp=fopen("listino.txt","w");
  22.     registra(fp);
  23.     fclose(fp);           //int fclose(FILE *stream) -> il paramatero da passare è il puntatore fp
  24.     fp=fopen("listino.txt","r");
  25.     stampa(fp);
  26.     fclose(fp);          //int fclose(FILE *stream) -> il paramatero da passare è il puntatore fp
  27.     system("pause");
  28.     return 0;
  29. }
  30.  
  31.  
  32. void registra(FILE *pointer)
  33. {
  34.     int risp;
  35.     do
  36.     {  
  37.         system("cls");
  38.         cout<<"Inserisci descrizione: ";
  39.         scanf("%s",articolo.descrizione);  //Meglio non usare gets() ma scanf()
  40.         cout<<"Inserisci prezzo: ";
  41.         cin>>(articolo.prezzo);
  42.         fwrite(&articolo,sizeof(merce),1,pointer);
  43.         cout<<"Elenco finito?\n(0)NO\n(1)SI\nScelta: ";
  44.         cin>>risp;
  45.    }
  46.    while(risp==0);    //Tutti i cicli in C girano solo se la condizione è Vera
  47.    
  48. }
  49. void stampa(FILE *pointer)
  50. {  
  51.     system("cls");
  52.     cout<<"ARTICOLI & PREZZI"<<endl;
  53.     while(!feof(pointer))
  54.     {  
  55.         fread(&articolo,sizeof(merce),1,pointer);
  56.         cout<<articolo.descrizione<<" = "<<articolo.prezzo<<endl;        
  57.     }
  58. }



PM Quote
Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 17:40
Martedì, 05/01/2010
ok grazie mille

PM Quote