Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.94
Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
#1

Функция fgets и перевод строки - C++

26.05.2010, 16:15. Просмотров 4515. Ответов 10
Метки нет (Все метки)

Есть файл со строками, надо прочитать все через функцию fgets.
Как сделать, чтобы она читала каждую строку по очереди?

Проблема на самом деле в том, что только fgets учитывает пробелы при считывания(cin и fscanf не работают).
Возможно можно использовать другую функцию, главное учитывать пробелы и возможность переходить со строки к строке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2010, 16:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция fgets и перевод строки (C++):

Странно ведёт себя функция fgets - C++
(в файле лежит предложение на английском) int main() { FILE *f; char str; if ((f=fopen("Е:\\...имя файла","r"))=NULL){printf...

Считывает ли функция fgets строку посимвольно? - C++
Проконсультируйте пожалуйста. Смотрите данная функция имеет три аргумента: //Первый из трех аргументов функции является указателем на...

Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных... - C++
Вообщем вот такое задание: Строки читаются из текстового файла функцией fgets и указатели на них помещаются в структуру данных. Элементы...

Функция перезаписывает символы строки заданным количеством символов другой строки - C++
Программа работает. Но не совсем правильно. В конечной строке появляются непонятные символы, которых быть там не должно. В программе нельзя...

Функция разделения строки в массив отдельных частей этой строки - C++
Помогите написать функцию, которая на вход принимает строку типа String и возвращает уже массив String содержащий отдельные части этой...

Не работает fgets - C++
Код еще не написан, но появилась какая-то проблема...ЧТо я делаю не так? #include <stdio.h> #include <stdlib.h> #include...

10
Mur3ik
102 / 102 / 4
Регистрация: 12.05.2010
Сообщений: 232
26.05.2010, 16:28 #2
Цитата Сообщение от Sergey_O Посмотреть сообщение
Есть файл со строками, надо прочитать все через функцию fgets.
Как сделать, чтобы она читала каждую строку по очереди?

Проблема на самом деле в том, что только fgets учитывает пробелы при считывания(cin и fscanf не работают).
Возможно можно использовать другую функцию, главное учитывать пробелы и возможность переходить со строки к строке.
решение такой же задачи как и у вас
работа с файлами
1
Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
26.05.2010, 16:29  [ТС] #3
Цитата Сообщение от Mur3ik Посмотреть сообщение
а где там перевод строки?
0
Mur3ik
102 / 102 / 4
Регистрация: 12.05.2010
Сообщений: 232
26.05.2010, 16:32 #4
Цитата Сообщение от Sergey_O Посмотреть сообщение
а где там перевод строки?
fgets сама переходит со строки на строку
1
robert19
26 / 26 / 3
Регистрация: 26.03.2010
Сообщений: 305
26.05.2010, 16:36 #5
Вот вроде функция чтения из файла:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int Read_File (char* str){
        char fn[255]; 
        FILE *f;
        printf ("Enter File name: \n");
        gets(fn);
        f=fopen(fn,"r");
                if (!f){
                        printf ("Warning: no such file. Using stdin.");
                        return 1;
                }
        fseek(f,0,SEEK_END);
        long len = ftell (f);
        char* buf = new char [len+1];
        
        const int l_block = 1024;
        int num_block = len/l_block+1;
        fseek (f,0,SEEK_SET);
        fread (buf,l_block,num_block,f);
        buf[len] = '\0';
        strcpy(str,buf);
        puts(str);
        fclose(f);
return 0;
}
1
Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
26.05.2010, 16:37  [ТС] #6
Цитата Сообщение от Mur3ik Посмотреть сообщение
fgets сама переходит со строки на строку
Значит ты меня не понял:
-вот я один раз обратился к файлу - прочитал полностью первую строку и записал её в переменную, обработал.
-снова обращаюсь к файлу, теперь нужно, чтобы прочитал только вторую строку.
-и т.д

так вот я не понял, как сделать переход к новой строке. Там параметром можно писать, сколько символов читать, но это не то совсем.


2robert
спасибо, щас буду проверять.
да уж, сложноват ваш вариант для меня пока что)
0
Mur3ik
102 / 102 / 4
Регистрация: 12.05.2010
Сообщений: 232
26.05.2010, 16:47 #7
Цитата Сообщение от Sergey_O Посмотреть сообщение
Значит ты меня не понял:
-вот я один раз обратился к файлу - прочитал полностью первую строку и записал её в переменную, обработал.
-снова обращаюсь к файлу, теперь нужно, чтобы прочитал только вторую строку.
-и т.д
что тебе мешает прямо там в цикле после получения первой строки записать ее в переменную и обработать, потом в этом же цикле fgets вернет уже 2ю строку... итд...
1
Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
26.05.2010, 17:19  [ТС] #8
Пробовал, не возвращает.
А возможно как-нибудь сделать, чтобы fscanf считывал пробелы?

У меня вот допустим такая строка:
0|0|Проект лала|Сдача|17|36|13|26|4|2010|11|12|13|14|15|2011|16|17|18|19|11|2011

Я хочу её записывать в 1 переменную, а потом уже разбивать стртоком по словам, но это не суть. Главное чтобы оно правильно читалось, а сканф читает до первого пробела и обрывается.

Добавлено через 22 минуты
Может быть вообще нужно через другую функцию это всё делать?
0
kazak
3050 / 2371 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
26.05.2010, 17:29 #9
Цитата Сообщение от Sergey_O Посмотреть сообщение
так вот я не понял, как сделать переход к новой строке. Там параметром можно писать, сколько символов читать, но это не то совсем.
fgets читает до тех пор, пока не прочитает определенное количество символов, указанных во втором параметре или пока не встретит символ перехода на новую строку. Таким образом, если у тебя в файле все строки заканчиваются символом перехода строки, и у тебя строковая переменная достаточно большого размера, чтобы вместить самую длинную строку в файле, то fgets будет считывать строго по строкам.
1
Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
26.05.2010, 17:47  [ТС] #10
всем спасибо.
0
odip
Эксперт С++
7159 / 3221 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
27.05.2010, 14:52 #11
C чтением fgets бывают разные приколы
1) файл пустой
2) последняя строка в файле не содержит '\n'
4) строка не влазит в буфер
но все это преодолимо
0
27.05.2010, 14:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2010, 14:52
Привет! Вот еще темы с ответами:

fgets и CString - C++
Здравствуйте, У меня возник вопрос, проконсультируйте, пожалуйста, что можно сделать в этой ситуации? Нужно прочитать строчку...

Fgets некорректный результат - C++
#include <iostream> #include <cstring> #include <cstdio> using namespace std; bool password(); int main () { if(password())...

Использование функции fgets - C++
Передо мной встала следующая проблема - не могу понять, как работает функция strcmp. К примеру приведу данный код программы: ...

Использование оператора fgets - C++
Помогите решить задачу, пожалуйста, с использованием функции fgets. В командной строке программе передаются два числа. Из файла с текстом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.