C/C++ standard bemenetről olvasás, amíg adat érkezik?
Segitek:
for ciklus;
std::readline();
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;
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;
}
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 :)
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!