Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    While infinito con la gestione file

    Buonasera a tutti!
    Ho creato un programma che scriva in un file txt (nella cartella del programma) la posizione (numerate da 0 a 9) delle parole in un altro file txt suddivisi da virgole o punto.
    Esempio,apre il primo txt che contiene:
    "sole,ciao,due."
    Mi crea un altro file txt dove conversa il numero delle parole che legge (che conto tramite un contatore che ho chiamato "parole" e deve dirmi a che posizione inizia e finisce la frase,esempio,con il txt di esempio di prima mi fa un altro txt con scritto:
    "103 258 31012",il problema è che aprendo il primo file in lettura non mi esce mai dal while che dovrebbe verificare la fine del file (ovvero quando non c'è più nulla da leggere),ecco il codice:


    codice:
    #include <iostream>
    #include <stdlib.h>
    #include <fstream>
    
    using namespace std;
    
    void scrittura_file(int inizio, int fine,int parole){
       ofstream miofile;
    
       miofile.open("dati parole.txt");
       miofile<<parole<<inizio<<fine<<endl;
       miofile.close();
    
    }
    
    int main(){
      ifstream OpenFile("testo.txt");
      int a;
      int inizio=0,fine=0,parole=0,contatore=0;;
      bool ciclo=0;
      while(!OpenFile.eof())
      {
        OpenFile>>a;
        if ((a == 44) || (a== 46)){
        parole++;
        scrittura_file(inizio,fine,parole);
        }
        if (ciclo==0)
        inizio=0;
        else{
        inizio=fine+2;
        fine=contatore;
        contatore++;
        }
        ciclo=1;
      }
      OpenFile.close();
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non stai leggendo valori numerici interi ma caratteri. Quindi deve essere

    char a;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    Non stai leggendo valori numerici interi ma caratteri. Quindi deve essere

    char a;
    giusto! Come mai non lo segna come errore il compilatore?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E perché dovrebbe? Che ne sa il compilatore di cosa c'è nel file ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da oregon
    E perché dovrebbe? Che ne sa il compilatore di cosa c'è nel file ?
    quindi in teoria se nel file ci sono numeri li legge giusto? se ci sono sia numeri che lettere posso usare "char" giusto?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sì ... puoi anche leggere in un array di char o in un oggetto string, non è detto che devi usare un char per le stringhe.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Originariamente inviato da oregon
    Sì ... puoi anche leggere in un array di char o in un oggetto string, non è detto che devi usare un char per le stringhe.
    ok grazie!
    Un'altra cosa,continuando con il programma ho creato una funzione che fa una cosa particolare,ecco il codice:

    codice:
    void inizio_fine (int &inizio,int &fine,int random)
    {
    ifstream OpenFile("dati.txt");
      char ch;
      int contatore=-1,modulo;
      bool a=0; //se è a 1 possiamo copiare i file!
      while(!OpenFile.eof())
      {
        contatore++;
        OpenFile>>ch;
        modulo=contatore%3;
        if (modulo==0){
        if (ch == random){
        a=1;
        }
        }
        if ((a==1) && (modulo==1))
            inizio=ch;
        if ((a==1) && (modulo == 2))
            fine=ch;
      }
      OpenFile.close();
    
    
    }
    ma non entra mai nella parte di codice:

    codice:
     if (ch == random){
        a=1;
        }
    anche se il modulo è uguale a 0 (zero) e anche se il contenuto della variabile ch è uguale al contenuto della variabile random...come mai?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    credo che il motivo sia perchè ch è un char;random è un intero

    Per confrontarli dovresti fare in questo modo:
    codice:
    if (ch - '0' == random)
    ......

  9. #9
    Originariamente inviato da Marco1995
    credo che il motivo sia perchè ch è un char;random è un intero

    Per confrontarli dovresti fare in questo modo:
    codice:
    if (ch - '0' == random)
    ......
    Nada,non funziona,neanche se trasfromo random in char nulla,non fa! Non capisco il perchè,se trasfromo ch in int (perchè da file txt legge numeri) mi legge tutta una serie di numeri e non un singolo...

    però funziona con:

    codice:
    if(ch == '0'+random)
    (trovato su internet)
    Grazie mille!

    EDIT:

    Un ultimo quesito,siccome mi trovo un numero in un variabile char se la riporto in un int mi riporta il relativo codice in ASCII come lo trasformo in cifra e lo metto in una variabile (int) senza usare uno switch-case?


    EDIT: Ho risolto sottraendo 48 XD

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    EDIT: Un ultimo quesito,siccome mi trovo un numero in un variabile char se la riporto in un int mi riporta il relativo codice in ASCII come lo trasformo in cifra e lo metto in una variabile (int) senza usare uno switch-case? EDIT: Ho risolto sottraendo 48 XD
    Se parli di singola cifra (e quindi di char..singolo carattere) puoi fare nel modo che hai detto tu

    Se il numero è composto da più cifre esistono le funzioni atoi e itoa ..

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.