Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/32: Рейтинг темы: голосов - 32, средняя оценка - 4.97
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180

Считывает ли функция fgets строку посимвольно?

07.05.2011, 21:06. Показов 6297. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проконсультируйте пожалуйста. Смотрите данная функция имеет три аргумента:
//Первый из трех аргументов функции является указателем на местоположение считаваемой строки
//Второй аргумент (2) содержит предельную длину считаваемой строки
//третий аргумент указывает на файл который который будет читаться
Исходя из всего этого у меня 2 вопроса.
1)Она считывает строку посимвольно каждый символ отдельно?
2)Если например дано fgets( load_string, 2 , file ); откуда она начинает считывать с самого начала файла
. и если например есть цикл
C++
1
2
3
4
5
 while(strcmp(load_string, "\n")!=0)
                {
                        fgets( load_string, 2 , file );
                     
                }
то она считывае каждый символ и проверяет в while?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2011, 21:06
Ответы с готовыми решениями:

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

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

Помогите считать строку из файла с помощью fgets
char stroka; FILE *textfile; if (textfile=fopen('filename.txt','r+')==NULL) puts('open error!'); if...

4
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
07.05.2011, 23:31
Да, если файл нормально открыт, то считывать будет сначала. Если надо не с начала, то установи считыватель куда надо, смотри функции fseek, fsetpos, ftell, rewind

По поводу первого вопроса- да ты возьми да проверь, всё же есть для этого, запомнишь хоть. Ну если хочешь так- нет, функция fgets считывает файл построчно и только потом идёт на проверку условия.
Если надо именно посимвольно, смотри fgetc или getc
0
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
08.05.2011, 07:38  [ТС]
А если дан вот такой листинг. Тут просто идет считывание из файла строк и происходит разбиение строки каждого слова символов для того чтобы занести в поля структуры.
То что хранится в файле вот такой вид имеет:
2
MAZDA,qwer,123,3356,1900,10001,Me
Caen,white,123,456,1998,123,Nikto
В первом while мы считываем строку где содержится цифра до символа \n новой строки. Когда мы сохраняли до этого в файл то каждой строке я добавлял символ /n. Поэтому тут она считает только одну строку и выйдет из цикла. Потому что fgets считывает функция считывает до символа \n или до максимального количества заданного вторым аргументом. Потом мы используем N=atoi(string); для того чтобы СИМВОЛ 2 перевести в цифру и использовать в цикли for что будет означать что надо будет дважды выполнить чтобы сохранить две структуры.
Вопрос в том, что во втором while мы теперь начинаем считывать строку т.е. мы считали строку MAZDA,qwer,123,3356,1900,10001,Me и теперь забиваем ее в структуру потом for снова повторяется для
второй строки Caen,white,123,456,1998,123,Nikto. Получается что fgetc ЗАПОМИНАЕТ что надо начать со
следующей строки а не с одной и той же???

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
void LoadFromFile()
{
        FILE *file = fopen( "autos.txt", "r" );
        if( file != 0 )
        {
                char load_string[2];
                char string[255];
                string[0]='\0';
                while(! feof(file) && strcmp(load_string, "\n")!=0)  // schitivaem kolichestvo mashin v faile
                {
                        fgets( load_string, 2 , file );
                        strcat(string, load_string);
                }
                N=atoi(string);
                delete[] AutosArray;
                AutosArray=new Auto[N];
                for(int i=0; i<N; i++)    // teper' schitivaem mashini
                {
                        string[0]='\0';
                        load_string[0]='\0';
                        while(! feof(file) && strcmp(load_string, "\n")!=0)   // schitivaem stroky
                        {
                                fgets( load_string, 2 , file );
                                strcat(string, load_string);
                        }
                                                          // zanosim stroky v strukturu
                        char* temp=new char[255];
                        temp[0]='\0';
                        int j=0;
                        for(int k=0; (char)string[j]!=','; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        strcpy(AutosArray[i].Mark, temp);
                        temp[0]='\0';
                        j++;
                        for(k=0; (char)string[j]!=','; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        strcpy(AutosArray[i].Color, temp);
                        temp[0]='\0';
                        j++;
                        for(k=0; (char)string[j]!=','; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        strcpy(AutosArray[i].Serial, temp);
                        temp[0]='\0';
                        j++;
                        for(k=0; (char)string[j]!=','; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        strcpy(AutosArray[i].RegNum, temp);
                        temp[0]='\0';
                        j++;
                        for(k=0; (char)string[j]!=','; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        AutosArray[i].Year=atoi(temp);
                        temp[0]='\0';
                        j++;
                        for(k=0; (char)string[j]!=','; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        AutosArray[i].Price=atoi(temp);
                        temp[0]='\0';
                        j++;
                        for(k=0; (char)string[j]!='\n'; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        strcpy(AutosArray[i].Owner, temp);
                }
                cout<<"Autos.txt loaded"<<endl;
        }
        else
        {
                N=0;
                delete[]AutosArray;
                cout << "File not found !!!" << endl;
        }
        fclose(file);
}
Добавлено через 9 минут
Цитата Сообщение от kravam Посмотреть сообщение
функция fgets считывает файл построчно и только потом идёт на проверку условия
Да и я проверил вставил в while строку вывода все таки fgetc читает не всю сразу строку а потом проверка условия. она извлекает один символ а потом идет проверка и так каждый раз.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
08.05.2011, 10:51
Цитата Сообщение от .Malek. Посмотреть сообщение
Да и я проверил вставил в while строку вывода все таки fgetc читает не всю сразу строку а потом проверка условия. она извлекает один символ а потом идет проверка и так каждый раз.
В конце-то концов разберись уж с функциями, fgets или fgetc
0
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
08.05.2011, 10:52  [ТС]
Да я все уже разобрался в другой теме
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.05.2011, 10:52
Помогаю со студенческими работами здесь

Обрезать строку при вводе через fgets
Всем доброго времени суток! Столкнулся с такой проблемой - заполняю список значений следующей процедурой void addToQueue(T_Queue...

Расскажите как переписать 6ю строку чтобы было через fgets
#include &lt;stdio.h&gt; int main () { char inStr; char outStr; scanf(&quot;%s&quot;, inStr); int i = 0; int j = 0; while (inStr !=...

Посимвольно считать из переменной строку
Добрый вечер Нам задали написать программу &quot;Азбука МОРЗЕ&quot; Какой функцией считать посимвольно строку, например &quot;.--.&quot; Мне...

Считать посимвольно строку из консоли
Добрый день! Необходимо в программе организовать считывание длинной строки из консоли. Строка настолько длинная, что записывать её в память...

Как посимвольно записать строку в массив?
Всем привет! У меня имеется строка типа string: str=&quot;молоко&quot;. Нужно создать массив букв (наверное динамический, потому что строка...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru