Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Вывод строки под номером N Из файла

#cpp #c


Нужно чтобы выводилась строка под номером N, который генерируется рандомно.
Какую функцию нужно использовать для этого? Желательно сишные функции (cstdio)
    


Ответы

Ответ 1



Вам нужны функции открытия файла, чтения и закрытия. Открываете файл, читаете построчно и увеличивайте счетчик. Когда счетчик достиг нужной, выводим строку. схематический код: char * getLine(char* filename, int nedded) { char line[250]; FILE * f = open(filename, "r"); int c = 0; while (c < needed && not eof(f)) { fscanf(f, "%s", line); c++; } close(f); if (c!= nedded) { return NULL; } return strdup(line); // не забыть потом освободить буфер } char * line = getLine("input.txt", N); if (line) { printf("%s\n", line); free(line); }

Ответ 2



//индексация строк с нуля int n_readline(const char* fname, int n, char* buf, int len){ char c; FILE* fp = fopen(fname, "rt"); if(fp == NULL) return 0; while(! feof(fp) && (n > 0)){ fscanf(fp, "%*[^\n\r]%c", &c); --n; } if(! feof(fp)) fgets(buf, len-1, fp); else *buf = '\0'; fclose(fp); return (int)(*buf != '\0'); } int main(void){ char buf[255]; //считать 2-строку if(n_readline("levels.txt", 1, buf, sizeof(buf))) puts(buf); //считать 3-строку if(n_readline("levels.txt", 2, buf, sizeof(buf))) puts(buf); return 0; }

Ответ 3



В других ответах варианты на чистом C, а вот вам на C++: #include std::string get_line_n(const std::string& filename, size_t n) { std::ifstream f(filename); // тут бы не помешала проверка на то, что с файлом всё в порядке std::string line; bool notreached = true; while (std::getline(f, line) && notreached = (n-- > 0)) ; if (!notreached) return line; else // такой строки нет, сообщайте об ошибке // например, бросьте подходящее исключение throw std::range_error(); } Для сравнения, вот на C#: string getLineByNumber(string filename, int n) { var line = File.ReadLines(filename).Skip(n).FirstOrDefault(); if (line != null) return line; else throw new IndexOutOfRangeException(); } Упражнение: зачем нужна переменная notreached? Почему просто не проверить значение n?

Комментариев нет:

Отправить комментарий