Kezdőoldal » Számítástechnika » Programozás » C/C++ standard bemenetről...

C/C++ standard bemenetről olvasás, amíg adat érkezik?

Figyelt kérdés
A bemenetre "n" sor érkezik. Hogyan olvassam be az "n" sor minden sorát?

2017. okt. 25. 22:19
 1/4 anonim válasza:

Segitek:

for ciklus;

std::readline();

2017. okt. 25. 22:40
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:

for ciklus kell neked. n-szer olvasol scanf-fel

mondjuk ha tömbbe kell olvasnod például soronként egy számot:

(részlet)

int i;

int* tomb=(int*)malloc(n*sizeof(int));


for(i=0; i<n; i++)

scanf("%d", tomb+i);


//használat után free(tomb)

Ebben van a ciklus, ami n-szer fut, dinamikus memória, és beolvasás. Elemezgesd, és tanuld.

Ez elsősorban C kód, de C++ban is működik, bár oda már fejlettebbet szoktak. (na jó, a kedvedért C++ban: )


int[] tomb = new int[n];

for(int i=0; i<n; i++)

std::cin >> tomb[i];


//használat után delete[] tomb;

2017. okt. 25. 22:44
Hasznos számodra ez a válasz?
 3/4 Adam23713 ***** válasza:

Helló!

Van 1-2 lehetőség :)


Első:


#include <iostream>

#include <vector>


int main(int argc, char *argv[])

{

std::string line;

std::vector<std::string> lines;


while( std::getline(std::cin,line) )

lines.push_back(line);


//Write saved data

for(auto& line : lines)

std::cout << line << std::endl;


return 0;

}


Ez az EOF karakterig olvas be a standard bemenetről, ha ténylegesen tudod, hogy mennyi sor kell akkor while helyet:


for(int i = 0; i < n; i++)

{

std::getline(std::cin,line)

lines.push_back(line);

}



A második lehetőség:

#include <iostream>

#include <iterator>

#include <vector>


int main(int argc, char *argv[])

{

std::vector<std::string> lines;


//Read lines

std::string line { std::istreambuf_iterator<char>(std::cin), std::istreambuf_iterator<char>() };

lines.push_back(line);


//Write saved data

for(auto& line : lines)

std::cout << line << std::endl;


return 0;

}

2017. okt. 26. 00:03
Hasznos számodra ez a válasz?
 4/4 Adam23713 ***** válasza:

Hopsz, a másodikat javítom:


#include <iostream>

#include <iterator>

#include <vector>


int main(int argc, char *argv[])

{

std::vector<std::string> lines;


//Read lines

std::vector<char> sentence { std::istreambuf_iterator<char>(std::cin), std::istreambuf_iterator<char>() };


std::string tmp;

auto startPos = sentence.begin();

for(auto reader = startPos; reader != sentence.end(); reader++)

{

if(*reader == '\n')

{

lines.push_back(tmp);

startPos = reader + 1;

tmp = "";

}

tmp += *reader;

}


//Write saved data

for(auto& line : lines)

std::cout << line << std::endl;


return 0;

}


Ez csak amolyan érdekesség, az első azért jóval szebb és egyszerűbb :)

2017. okt. 26. 18:57
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!