Pereiti prie turinio

Char masyvo nuskaitymas


Rekomenduojami pranešimai

Sveiki, taigi šiuo metu pradedu mokintis programuoti ir iškilo tokia problem. Kaip į char masyvą nuskaitydi 2 ar daugiau žodžių (Cpp)?

 

Tarkime į char auto[21] nuskaityti iš tekstinio failo HARLEY DAVIDSON V-ROD.

 

Dėkui už pagalbą iš anksto.

Redagavo baracker
Nuoroda į pranešimą
Dalintis kituose puslapiuose

in.get(22, auto)

 

nuskaitys tik 21 vietas, o 22 vieta bus priskirta eilutes pabaigai. ir masyvui 22 vietas palik

 

Nalabai suprantu kai nodauti, jį. Klaidą rodo.

Štai yra pradiniai duomenys.

 

1 MIG29 Subaru Legacy (Juoda, 2004m)

2 888888 BMW 745 (Juoda, 2002m)

3 007 MERCEDES BENZ S320 (Pilka, 1999m)

4 001 HARLEY DAVIDSON V-ROD (Pilka, 2003m)

5 VAELGT AUDI A4 (Geltona, 2005m)

6 TDX998 Audi A6 (Zalia, 1999m)

7 AVILYS LEXUS GS 300 (Zalia, 2005m)

8 LT0005 BMW X5 (Melyna, 2004m)

9 LT0001 Subaru Legacy (Pilka, 2006m)

10 444444 VW NEW BEETLE (Geltona, 2003m)

 

Ir man reikia atskirai nuskaityti eil.numerį, auto numerius, marke, ir kita informacija.

 

Štai kiek padariau.

 

#include <iostream>

#include <cstdlib>

#include <fstream>

#include <string>

#include <cstring>

using namespace std;

struct EILUTE

{

int skaicius;

char numeris[6];

char automarke[21];

char informacija[20];

};

int main()

{

EILUTE A[10];

ifstream D("auto.txt");

int i = 0;

while (!D.eof())

{

i++;

cout << "=========== NAUJA EILUTE ================\n";

D >> A.skaicius;

cout << "Eil.nr --------- " << A.skaicius << endl;

D >> A.numeris;

cout << " Valstybinis numeris: " << A.numeris << endl;

D >> A.automarke;

cout << " Automobilio marke: " << A.automarke << endl;

D >> A.informacija;

cout << " Kita informacija: " << A.informacija << endl;

system("pause");

}

cout << endl;

cout << "Duomenys perskaityti :) " << endl;

cout << endl;

D.close();

system("pause");

return 0;

}

Redagavo baracker
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nalabai suprantu kai nodauti, jį. Klaidą rodo.

Štai yra pradiniai duomenys.

 

1 MIG29 Subaru Legacy (Juoda, 2004m)

2 888888 BMW 745 (Juoda, 2002m)

3 007 MERCEDES BENZ S320 (Pilka, 1999m)

4 001 HARLEY DAVIDSON V-ROD (Pilka, 2003m)

5 VAELGT AUDI A4 (Geltona, 2005m)

6 TDX998 Audi A6 (Zalia, 1999m)

7 AVILYS LEXUS GS 300 (Zalia, 2005m)

8 LT0005 BMW X5 (Melyna, 2004m)

9 LT0001 Subaru Legacy (Pilka, 2006m)

10 444444 VW NEW BEETLE (Geltona, 2003m)

 

Ir man reikia atskirai nuskaityti eil.numerį, auto numerius, marke, ir kita informacija.

 

Štai kiek padariau.

 

#include <iostream>

#include <cstdlib>

#include <fstream>

#include <string>

#include <cstring>

using namespace std;

struct EILUTE

{

int skaicius;

char numeris[6];

char automarke[21];

char informacija[20];

};

int main()

{

EILUTE A[10];

ifstream D("auto.txt");

int i = 0;

while (!D.eof())

{

i++;

cout << "=========== NAUJA EILUTE ================\n";

D >> A.skaicius;

cout << "Eil.nr --------- " << A.skaicius << endl;

D >> A.numeris;

cout << " Valstybinis numeris: " << A.numeris << endl;

D >> A.automarke;

cout << " Automobilio marke: " << A.automarke << endl;

D >> A.informacija;

cout << " Kita informacija: " << A.informacija << endl;

system("pause");

}

cout << endl;

cout << "Duomenys perskaityti :) " << endl;

cout << endl;

D.close();

system("pause");

return 0;

}

 

neduota kiek vietu palikta auto pavadinimui?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Padariau kaip pats moku, o atsakyt į tavo klausimą tikrai negaliu, nes nieko nežinau apie normaliuosius masyvus.

---------> Nuoroda į pastebin

 

// uzdarbis.lt != stackoverflow.com

 

 

Man dar kolkas per sunkiai suprantama kaip tu čia padariai, bet dėkui. O kaip grinai i char masyva idėti kelis žodžius nežinai? Ta prasme kad ir tarpo simbolis įeitų, o ne kaip dabar iki pirmo tarpo ideda į masyvą.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Man dar kolkas per sunkiai suprantama kaip tu čia padariai, bet dėkui. O kaip grinai i char masyva idėti kelis žodžius nežinai? Ta prasme kad ir tarpo simbolis įeitų, o ne kaip dabar iki pirmo tarpo ideda į masyvą.

 

Kaip ir sakiau, nieko apie paprastus masyvus nežinau, todėl negaliu atsakyt į tavo klausimą. Man juos pristatė mokykloj šiais metais berods, visiškai nepatiko ir susiradau vector klasę kaip alternatyvą. Nežinau ar turiu tokia teisę, bet patarčiau mokytis su vector masyvais dirbt ir gyvenimas paprastesnis bus. Nereikės kruštis juos rikiuojant, trinant, keičiant ir kodas tvarkingiau atrodo.

 

TL;DR; Į tavo klausimą atsakyt negaliu.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Vietoj simbolių eilutės naudok string'ą – nereikės rūpintis apie masyvo dydį. Taip pat jis turi papildomų funkcijų, kurios palengvina veiksmus su tekstu.

 

Man dar kolkas per sunkiai suprantama kaip tu čia padariai, bet dėkui. O kaip grinai i char masyva idėti kelis žodžius nežinai? Ta prasme kad ir tarpo simbolis įeitų, o ne kaip dabar iki pirmo tarpo ideda į masyvą.

 

Keli variantai:

  1. Iš anksto žinai, kiek tie keli žodžiai užima simbolių, ir skaitai su cin.get() nurodydamas kiek simbolių skaityti;
  2. Po kiekvieno segmento padedi kokį nors skiriamąjį simbolį (pavyzdžiui, kablelį), ir skaitai su cin.get() arba getline() kaip ribą iki kur skaityti pateikdamas tą skiriamąjį simbolį;
  3. Iš anksto žinai, kiek žodžių sudarys terminas, bei visus šiuos žodžius nusiskaitai atskirai ir vėliau juos sujungi į vieną simbolių eilutę.

Redagavo wi_lius
Nuoroda į pranešimą
Dalintis kituose puslapiuose

 

 1 MIG29  Subaru Legacy         (Juoda, 2004m)
2 888888 BMW 745               (Juoda, 2002m)
3 007    MERCEDES BENZ S320    (Pilka, 1999m)
4 001    HARLEY DAVIDSON V-ROD (Pilka, 2003m)
5 VAELGT AUDI A4               (Geltona, 2005m)
6 TDX998 Audi A6               (Zalia, 1999m)
7 AVILYS LEXUS GS 300          (Zalia, 2005m)
8 LT0005 BMW X5                (Melyna, 2004m)
9 LT0001 Subaru Legacy         (Pilka, 2006m)
10 444444 VW NEW BEETLE         (Geltona, 2003m)

Panašu, kad duomenims yra skirtas tam tikras simbolių skaičius, tai pagal tai ir nuskaitinėk. Jei ne, tai tada teks pasinaudoti informacija, kad iki pirmo tarpo yra skaičius, tada iki kito tarpo yra numeris, iki skliaustų markė ir modelis, o toliau kita informacija.

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ą...