Pereiti prie turinio

C++ skaitymas is failo(VBE)


Rekomenduojami pranešimai

Stai pavizdys kaip skaityti is failo po linija ir po simboli. Manau susideliosi kaip toliau daryt.

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
int main() 
{    //char sum = 0;
char x;
ifstream inFile("s1.txt");
if (!inFile) {
cout << "Unable to open file";        exit(1);
}
while (x != '\n') {
while (inFile >> x) {
cout<<"x = "<<x<<endl;
}
}
inFile.close();
getchar();
return 0;
}

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Problema ta, kad reikia stringo konkretaus ilgio, kartu su visais tarpais, o >> operatorius praleidzia tarpus. Ir dar taip pat nezinoma kiek zodziu bus tarp to stringo..

Na tai .getline() arba .read() tada, o išsirenki duomenis tada jau pats. Iš to, ką matau pas tave, užtektų pasiimt nors ir į atskirus stringus vardą/pavardę, po to sujungt.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Cia aisku senai as laikiau, bet kartais nebudavo egzamino uzduotyje nurodyta kiek bus eiluciu faile?

 

Kiek žiūrėjęs dar nebuvo, kad būtų nenurodytą, bet mokyklinėje programoje tiek c++, tiek pascal yra, kad turi mokėti nuskaityti. Taigi gali ir egazamine papulti toks dalykas.

 

http://77.79.24.138:...ol_pakartot.pdf pati paskutinė užduotis, apačioje.

O šituo atveju yra nurodyta kiek turi būti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

na manau kad per sudetingai jus mastote. Jugi nuskaitote ten varda i viena kintamaji pavarde i kita kintamaji ir paskui skaicius, viska nuskaitote su dvejais ciklais. su >> operatoriais. Jugi su abecele nedirbsite, tik su skaiciais.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

void skaitymas()
{
   char eil[20];
   fin >> n;
   for (int i = 1; i <= n; i++)
   {
       fin >> k;

       for (int j = 1; j <= k; j++)
       {
           n1++;
           fin.ignore(80, '\n');
           fin.get(eil, 20);
           A[n1].vardas = eil;
           fin >> A[n1].m >> A[n1].s;
       }
   }
}

 

Būtent šios programos nuskaitymo procedūrą rašiau taip.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

void skaitymas()
{
   char eil[20];
   fin >> n;
   for (int i = 1; i <= n; i++)
   {
       fin >> k;

       for (int j = 1; j <= k; j++)
       {
           n1++;
           fin.ignore(80, '\n');
           fin.get(eil, 20);
           A[n1].vardas = eil;
           fin >> A[n1].m >> A[n1].s;
       }
   }
}

 

Būtent šios programos nuskaitymo procedūrą rašiau taip.

 

fin.ignore(80, '\n');

 

Paaiškink ką būtent šita eilutė daro.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tiksliai nenupasakosiu, bet kažkaip praleidžia eilutę ir pereina į naują, kadangi nuskaičius pirmą kintamąjį, kuris virš pavadinimų yra, žymeklis vis dar toje pirmoje eilutėje yra, su tuo ignore mes pereinam į sekančia, kurioje jau tekstas parašytas. O tada fin.get(eil, 20); nuskaito viską kas yra tuose 20 simbolių. Programoje tam ir nurodytas simbolių skaičius, kuris naudojamas įrašyti vardą, pavadinimą ar kažką kitką.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nežinau, kažkaip daugelis labai jau sunkiai čia bando išsivartyti... Mano variantas toks:

 

#include <iostream>
#include <fstream>     
#include <string>
using namespace std;

int main() 
{    
 string Eilute;
 ifstream Failas("Duomenys.txt");        

  while (!Failas.eof())
  {
    getline(Failas, Eilute);    
    cout << Eilute << endl;
  }    

Failas.close();     
}

Redagavo tsuMi
Nuoroda į pranešimą
Dalintis kituose puslapiuose

na manau kad per sudetingai jus mastote. Jugi nuskaitote ten varda i viena kintamaji pavarde i kita kintamaji ir paskui skaicius, viska nuskaitote su dvejais ciklais. su >> operatoriais. Jugi su abecele nedirbsite, tik su skaiciais.

 

O jei vardas sudarytas iš daugiau nei 2 žodžių (Žanas Klodas Van Damas)?

 

Nežinau, kažkaip daugelis labai jau sunkiai čia bando išsivartyti... Mano variantas toks:

 

#include <iostream>
#include <fstream>     
#include <string>
using namespace std;

int main() 
{    
 string Eilute;
 ifstream Failas("Duomenys.txt");        

  while (!Failas.eof())
  {
    getline(Failas, Eilute);    
    cout << Eilute << endl;
  }    

Failas.close();     
}

 

Reikia nuskaityti tik pirmus 20 simbolių, kurie bus asmens vardas. Po dar toje pačioje eilutėje yra kiti duomenys.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...