Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    26

    [c++] problema leggere file txt riga per riga

    Ciao a tutti.
    Programmo in c++ 5.4.2 su Windows 7.

    Sto scrivendo un programma in cui devo leggere un file txt riga per riga.
    Il codice è il seguente:

    codice:
    FILE *fd;
    char buf[200];
    char *res;
    
        fd=fopen("datiutente.txt", "r");
        if(fd==NULL) registrazione();
        while(1) 
        {
          i++;
          res=fgets(buf, 200, fd);
          if( res==NULL ) break;
          if(i==1) us=buf;
          if(i==2) pw=buf;
          if(i==3) creditiS=buf;
          if(i==4) LOGIN=buf;
        }
        fclose(fd);
    Fin qui tutto bene...
    però ad esempio quando la string "us" diventa come il primo rigo del file mi da come se in fondo alla stringa us c'è un "vai a capo".

    Mi spiego meglio: se ad esempio nel file txt c'è scritto:

    Picco16
    ...
    ...
    ...

    alla fine mi darà che us è uguale a Picco16, pero se scrivo if(us=="Picco16") mi da falso perché in fondo
    a Picco16 c'è quel benedetto "vai a capo".

    Come faccio a levarlo e a risolvere???
    Spero di essere stato chiaro.
    Grazie in anticipo per le risposte.
    Ultima modifica di MItaly; 20-03-2014 a 22:23

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Cosa è us ? Cosa è pw ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    26
    sono i dati dell'utente che sono scritti sul file txt.
    pw è la password e us il nome dell'utente...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La mia domanda era rivolta al tipo di oggetto/variabile ... dove hai dichiarato us e pw?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    26
    aa scusa ti posto tutto il codice:

    codice:
    #include<iostream>
    #include<fstream>
    #include<sstream>
    #include<windows.h>
    #include<time.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<string>
    #include<cstdio>
    #include<stdio.h>
    using namespace std;
    FILE *fd; //Puntatore che serve per apire il file dal leggere
    string us,pw,pw2,creditiS,LOGIN,usconferma,pwconferma;
    char buf[200];
    char *res; //questo è un puntatore a una zona di memoria in cui viene memorizzata la stringa letta
    int i,l,crediti;
    short menu;
    void selector(unsigned short color)
    {
       HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
       SetConsoleTextAttribute(hCon,color);
    }
    void registrazione()
    {
        system("cls");
        selector(12); cout<<endl<<"                                 Benvenuto!!!"<<endl<<endl<<endl;
        selector(7); cout<<"Scegli un nickname"<<endl;
        selector(2); cin>>us;
        selector(7); cout<<"Scrivi una password per registrarti"<<endl;
        selector(2); cin>>pw;
        selector(7); cout<<"Riscrivi al password per confermare"<<endl;
        selector(2); cin>>pw2;
        if(pw==pw2)
        {
            creditiS="100";
            selector(7); cout<<endl<<endl<<endl<<"Stai per creare un nuovo account con:"<<endl<<"Username:     "<<us<<endl<<"Password:     "<<pw<<endl<<endl<<"Premi 1 per confarmare l'account o un altro tasto per modificarlo"<<endl;
            menu=getch()-48;
            if(menu!=1) registrazione();
            ofstream dati("datiutente.txt");
            dati<<us<<endl<<pw<<endl<<creditiS<<endl<<"loginON";
            cout<<endl<<"Registrazione avvenuta con successo!";
            dati.close();
            Sleep(2500);
            system("cls");
        }else
        {
            selector(7); cout<<"La password e' errata "; selector(12); cout<<"riprova";
            Sleep(1750);
            system("cls");
            registrazione();
        }
    }
    void leggidati()
    {
        fd=fopen("datiutente.txt", "r");
        if(fd==NULL) registrazione();
        while(1) 
        {
          i++;
          res=fgets(buf, 200, fd);
          if( res==NULL ) break;
          if(i==1) us=buf;
          if(i==2) pw=buf;
          if(i==3) creditiS=buf;
          if(i==4) LOGIN=buf;
        }
        fclose(fd);
        istringstream in;
        in.str(creditiS);
        in>>crediti;
    }
    class menus
    {
        public:
            void login()
            {
                system("cls");
                cout<<"Benvenuto, accedi per continuare"<<endl<<endl<<endl<<"Username"<<endl;
                selector(2);  getline(cin,usconferma);
                selector(7); cout<<"Password"<<endl;
                selector(2);  getline(cin,pwconferma);
                if(usconferma==us && pwconferma==pw)
                {
                    cout<<"fffffffff";
                    Sleep(3000);
                    menuprinc();
                }else
                {
                    selector(12); cout<<endl<<endl<<"Accesso negato"; selector(7);
                    cout<<endl<<us<<endl<<pw<<endl<<usconferma<<endl<<pwconferma;
                    exit(1);
                    Sleep(3000);
                    login();
                }
            }
            void menuprinc()
            {
                system("cls");
            }
    };
    main() 
    {
        leggidati();
        if(LOGIN=="loginON")
        {
            menus oggetto;
            oggetto.login();
        }
    }
    Ultima modifica di MItaly; 20-03-2014 a 22:23 Motivo: Tag CODE

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il problema è nella fgets ma piuttosto che usare quel codice, dato che usi il C++, butta tutto, dalla fopen all fclose e sostituiscilo con

    codice:
        ifstream f("datiutente.txt");
        f >> us >> pw >> creditiS >> LOGIN;
        f.close();

    P.S. Usa i tag CODE quando mostri il codice nel forum ... dovresti saperlo ...
    Ultima modifica di oregon; 19-03-2014 a 20:13
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    26
    Grazie oregon sei sempre il meglio!!!

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Di nulla ... per così poco ...

    A quelle linee aggiungi il controllo dell'esistenza del file ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.