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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.93
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
#1

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

07.05.2011, 21:06. Просмотров 3491. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2011, 21:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывает ли функция fgets строку посимвольно? (C++):

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

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

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

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

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

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

4
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
07.05.2011, 23:31 #2
Да, если файл нормально открыт, то считывать будет сначала. Если надо не с начала, то установи считыватель куда надо, смотри функции fseek, fsetpos, ftell, rewind

По поводу первого вопроса- да ты возьми да проверь, всё же есть для этого, запомнишь хоть. Ну если хочешь так- нет, функция fgets считывает файл построчно и только потом идёт на проверку условия.
Если надо именно посимвольно, смотри fgetc или getc
0
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
08.05.2011, 07:38  [ТС] #3
А если дан вот такой листинг. Тут просто идет считывание из файла строк и происходит разбиение строки каждого слова символов для того чтобы занести в поля структуры.
То что хранится в файле вот такой вид имеет:
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
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
08.05.2011, 10:51 #4
Цитата Сообщение от .Malek. Посмотреть сообщение
Да и я проверил вставил в while строку вывода все таки fgetc читает не всю сразу строку а потом проверка условия. она извлекает один символ а потом идет проверка и так каждый раз.
В конце-то концов разберись уж с функциями, fgets или fgetc
0
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
08.05.2011, 10:52  [ТС] #5
Да я все уже разобрался в другой теме
0
08.05.2011, 10:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2011, 10:52
Привет! Вот еще темы с ответами:

Считывает символьную строку с экрана, выводит в файл (.txt) данную строку, перевернув её(было 123, стало 321) - C++
Наткнулся на задачу, помогите решить: вводиться символьная строка, программа считывает строку и выводит её в файл(текстовой), перевернув...

Вывести строку посимвольно. Ошибки при компиляции. - C++
Делаю задание в dev c++ #include &lt;iostream&gt; #include &lt;string&gt; void main() { int N; string S; cout...

Не работает код (программа считывает из файла строку, убирает лишние пробелы и записывает в другой файл строку, словами наоборот) - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;algorithm&gt; using namespace std; string...

Используя стек ,переписать строку посимвольно в обратном порядке - C++
Используя стек ,переписать строку посимвольно в обратном порядке!!!!!!!!!!!


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

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

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