В c вы могли использовать fopen и getch. Обычно, если вы не можете точно определить длину самой длинной строки, вы можете выделить большой буфер (например, 8 КБ) и почти гарантированно получить все строки.
Если есть вероятность, что у вас могут быть действительно очень длинные строки и вам нужно обрабатывать строку за строкой, вы можете выделить подходящий буфер и использовать realloc, чтобы удваивать его размер каждый раз, когда вы приближаетесь к его заполнению.
#include <stdio.h>
#include <stdlib.h>
void handle_line(char *line) {
printf("%s", line);
}
int main(int argc, char *argv[]) {
int size = 1024, pos;
int c;
char *buffer = (char *)malloc(size);
FILE *f = fopen("myfile.txt", "r");
if(f) {
do { // read all lines in file
pos = 0;
do{ // read one line
c = fgetc(f);
if(c != EOF) buffer[pos++] = (char)c;
if(pos >= size - 1) { // increase buffer length - leave room for 0
size *=2;
buffer = (char*)realloc(buffer, size);
}
}while(c != EOF && c != '\n');
buffer[pos] = 0;
// line is now in buffer
handle_line(buffer);
} while(c != EOF);
fclose(f);
}
free(buffer);
return 0;
}
В C - fgets (), и вам нужно знать максимальный размер, чтобы предотвратить усечение.
getline ()
- это то, что вы ищете. Вы используете строки в C ++, и вам не нужно знать размер заранее.
Предполагается, что пространство имен std:
ifstream file1("myfile.txt");
string stuff;
while (getline(file1, stuff, '\n')) {
cout << stuff << endl;
}
file1.close();
В C++ вы можете использовать глобальную функцию std::getline, она принимает строку, поток и необязательный разделитель и читает 1 строку, пока не будет достигнут указанный разделитель. Пример:
#include <string>
#include <iostream>
#include <fstream>
int main() {
std::ifstream input("filename.txt");
std::string line;
while( std::getline( input, line ) ) {
std::cout<<line<<'\n';
}
return 0;
}
Эта программа читает каждую строку из файла и передает ее на консоль.
Для C вы, вероятно, используете fgets
, я давно не использовал C, поэтому немного заржавел, но я думаю, что вы можете использовать это для эмуляции функциональности вышеупомянутой программы на C++ следующим образом:
#include <stdio.h>
int main() {
char line[1024];
FILE *fp = fopen("filename.txt","r");
//Checks if file is empty
if( fp == NULL ) {
return 1;
}
while( fgets(line,1024,fp) ) {
printf("%s\n",line);
}
return 0;
}
С ограничением, что строка не может быть длиннее, чем максимальная длина буфера, в который вы читаете.