Newsgroup: it.comp.lang.c++
Titolo: Leggere da file

Spero di non essere OT.
Purtroppo ho ancora bisogno del vostro aiuto, mi spiace disturbarvi.
Ho scritto questa funzione inserita in un header per la lettura di dati
inseriti in un file in solo testo:
void ReadReachedScores(void)
{
  char name[20];
  int position;
  int score;
  int i;
  ifstream file("scoretable.snk");
  if (!file) return;
  file >> position;
  file >> name;
  file >> score;
  printf("%d  %s           %d", position, name, score);
  file.close();
  return;
}
ma purtroppo legge tutto tranne name, ossia l'unica stringa di caratteri. Ho
praticamente copiato tutto da un libro, quindi non capisco cosa possa essere
sbagliato. Penso che sia necessario anche che sappiate come abbia scritto
all'interno del file:
void WriteReachedScore(int position, char player[20], int score)
{
  ofstream file("scoretable.snk");
  if (!file) {cout << "Impossibile memorizzare il punteggio"; return;}
  file << position << "  " << player << "                " << score;
  file.close();
  return;
}
chiamando: WriteReachedScore(1, "prova", 1);
Secondo voi cosa ho sbagliato? Scusate per il post lunghetto ma grazie per
risolvere ogni volta i miei problemi.
---
Ramses
---
icq:39860665
http://knowledgeparty.cjb.net
http://evilz0ne.cjb.net

"Ramses" ha scritto:
a me il tuo programma, in questa forma, funziona... 
e ho praticamente solo fatto cut&past, ho aggiunto 2 include, 2 std:: e 
scritto un main idiota...
----------------------------------
#include <fstream>
#include <cstdio>
void ReadReachedScores()
{
  char name[20];
  int position;
  int score;
  int i;
  std::ifstream file("scoretable.snk");
  if (!file) return;
  file >> position;
  file >> name;
  file >> score;
  std::printf("%d  %s           %d\n", position, name, score);
  file.close();
}
void WriteReachedScore(int position, char player[20], int score)
{
  std::ofstream file("scoretable.snk");
  if (!file) {cout << "Impossibile memorizzare il punteggio"; return;}
  file << position << "  " << player << "                " << score;
  file.close();
}
int main(){
 WriteReachedScore(1, "prova", 1);
 ReadReachedScores();
}

Cosi' a me funziona:
void ReadReachedScores(void)
{
  char name[20];
  int position;
  int score;
  std::ifstream file("scoretable.snk");
  if (!file) return;
  file >> position;
  file >> name;
  file >> score;
  std::cout << "Pos:   " << position << std::endl;
  std::cout << "Name:  " << name << std::endl;
  std::cout << "Score: " << score << std::endl;
  file.close();
  return;
}
void WriteReachedScore(int position, const char player[20], int score)
{
 std::ofstream file("scoretable.snk");
 if (!file) {
  std::cout << "Impossibile memorizzare il punteggio"; 
  return;
 }
 file << position << "  " << player << "                " << score;
 file.close();
 return;
}
mi chiedo: come mai non usi std::string per trattare stringhe ?
-- 
Posted from [194.214.173.28] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 mi chiedo: come mai non usi std::string per trattare stringhe ?
Perchč non so neanche cosa sia :-))!! Che roba č? Sul libro che ho studiato
lo faceva proprio cosě come ve lo ho dato io. Perň non mi funziona. Ora ho
risolto facendo cosě:
void ReadReachedScores(void)
{
  char name[10][20];
  int position[10];
  int score[10];
  int i;
  ifstream file("scoretable.snk");
  if (!file) return;
  clrscr();
  for (i = 0; (!file.eof()); i++)
  {
    file >> position[i];
    file >> name[i];
    file >> score[i];
  }
  for (int a = 0; a <= (i - 2); a++)
  {
    printf("%d  %s           %d\n", position[a], name[a], score[a]);
  }
  file.close();
  return;
}
Ossia aggiungendo quei due cicli. Per forsa doveva esserci qualche errore
che poi non c'era nel codice che ho postato. Ma non lo trovo. Cmq cosě mi
funge benissimo. Perň visto che tu e SuPeR avete usato questo std potreste
anche spiegarmelo? Io ho usato l'intestazione fstream.h ed iostream.h.
C'č ancora un'altra cosa che spero possiate spiegarmi. Nel secondo ciclo for
ho scritto:
for (int a = 0; a <= (i - 2); a++)
perchč altrimenti trovavo due linee inesistenti nel file con cifre e
caratteri strani. Cosě invece le tolgo via. Funziona, ma vorrei sapere il
perchč.
Grazie ancora a te ed a SuPeR.


Usa
#include <iostream>
#include <fstream> 
e fammi sapere che succede con la prima versione che hai postato....


Non avreste qualche documento online o qualche esempio su come gestire I/O
su files? Mi trovo in difficoltà anche nell'aggiungere stringhe a dei files
già esistenti, ed il libro che ho non mi soddisfa, non esiste neanche un
esempio con ios::app.
Spero che ci sia qualche informazione in rete, grazie ancora.


 e fammi sapere che succede con la prima versione che hai postato....
Ho rifatto tutto, messo gli headers come mi hai detto tu (uguali a come
avevo scritto io), e sembra funzionare. Mentre prima, nell'altro progetto,
mi dava access violation error, mi mostrava la finestra del codice assembly
e scriveva nella finestra DOS al posto del nome:
1  1
mentre il resto era esatto.
Ora invece funziona bene. Però prima avevo scritto tutto il codice in un
headers creato da me, e poi richiamavo le funzioni da un .cpp creato per
prova.
Può essere stato quello? Il fatto è che questo codice deve far parte di un
progetto più grande e lo sto solo testando da solo perchè non funzionava.
Cmq adesso anche quello iniziale funziona. Sinceramente non capisco, forse
era solo un problema del compilatore.
Boh.
Grazie ancora dell'aiuto.
