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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 133, средняя оценка - 4.83
lexflax
11 / 11 / 1
Регистрация: 03.04.2011
Сообщений: 627
#1

Как использовать функцию fgets? - C++

12.10.2011, 15:53. Просмотров 18759. Ответов 26
Метки нет (Все метки)

Люди прочитал тут про функцию fgets() но как то понять до конца не могу поясните плиз кто понимает и работал с ней уже... А нашел такую информацию:
Функция fgets() читает из входного потока stream не более num-1 символов и помещает их в массив символов, адресуемый указателем str. Символы, читаются до тех пор, пока не будет прочитан символ новой строки или значение EOF, либо пока не будет достигнут заданный предел. По завершении чтения символов сразу же за последним из них размешается нулевой символ. Символ новой строки сохраняется и становится частью массива, адресуемого элементом str.
(что за входной поток? и как понять не более num-1 символов?)
вот такое пример был дан
Приведенная программа использует функцию fgets() для вывода содержимого текстового файла, имя которого задано первым аргументом командной строки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])// вот тут первая переменная которая как инт обозначенна нужна?
{
   FILE *fp;// тут указатель на что? на то что fp будет работать с файлом? или не совсем так?
   char str[128];//тут массив символов размером 128? так?
   
   if((fp=fopen(argv[1], "r")) == NULL) // если не прочиталось то выход?
   {
      printf("Не удаётся открыть файл.\n");
      exit(1);
   }
 
   while(!feof(fp))// цикл пока не будет достигнут конец файла
   {
      if(fgets(str, 126, fp))// вот тут не понимаю словесно можите пояснить? че куда и как?
         printf("%s", str);// ну тут вывод стоки  только что значит "%S"
   }
   fclose(fp);
 
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2011, 15:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как использовать функцию fgets? (C++):

Как использовать getline и fgets? - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; using std::ofstream; using std::cout; using std::endl; using...

Как заменить функцию fgets на strlen и strcpy? - C++
while (fgets(s1, sz_line, fp)) //будет прочитано 120 символов { // считаем длину текущей строки , будет в j j = 0; while...

Как в C++ использовать функцию inc(); ? - C++
подскажите пожалуйста, как вот это: inc(b); можно сделать в С++?

Как использовать функцию? - C++
Помогите, плз. Беда с функциями, не совсем понимаю как их вызывать. Вот запилил я, например, прогу, которая задает рандомный массив и юзает...

Как использовать функцию flush()? - C++
для проверки правильности вводимых данных использую такой код #include &lt;stdio.h&gt;; #include &lt;iostream&gt;; using namespace std; ...

Как использовать функцию Kbhit()? - C++
Как я понял, то функция kbhit() сохраняет значение нажатой клавиши в буфере. Подскажите, как получить это значение из буфера. Мне...

26
lexflax
11 / 11 / 1
Регистрация: 03.04.2011
Сообщений: 627
14.10.2011, 15:11  [ТС] #16
а как можите накидать?
0
lexflax
11 / 11 / 1
Регистрация: 03.04.2011
Сообщений: 627
14.10.2011, 15:46  [ТС] #17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;
main()
{
char filename[] = {"save.txt"};
FILE *fp;
char temp[100];
fp = fopen(filename, "r");
while (fgets(temp, 100, fp) != NULL)
cout << temp;
fclose(fp);
getch();}
Он считывает и выводи все по строчно, а можно чуть листинг программы изменить так чтоб он допустим в каждой строке считывал только первый символ ну в данном случае 2 8 1 , или допустим по два символа и так далее? покажите примерно как? я думал что 100 это количество символов которое читается в каждой строке, изменял на два но так же выводит всю длинну строк, а не только первые 2 символа в каждой строке
0
An1ka
66 / 71 / 2
Регистрация: 30.06.2011
Сообщений: 176
14.10.2011, 15:58 #18
C++
1
cout << temp[0]; // Вывод первого символа в строке
Для остальных символов так же.
Тут еще важно использовать strlen(...) проверять длину строки, чтобы знать сколько всего символов в строке.
0
lexflax
11 / 11 / 1
Регистрация: 03.04.2011
Сообщений: 627
14.10.2011, 16:07  [ТС] #19
Цитата Сообщение от An1ka Посмотреть сообщение
cout << temp[0]; // Вывод первого символа в строке
ну это получается вывод первых, а как сделать чтоб было именно считывание только первых а вывод оставить не тронутым?
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 12
14.10.2011, 16:59 #20
ну если память не изменяет то fgetc

Добавлено через 1 минуту
а потом надо определить длину строки и прибавить это число к указателю чтения
0
lexflax
11 / 11 / 1
Регистрация: 03.04.2011
Сообщений: 627
14.10.2011, 16:59  [ТС] #21
Цитата Сообщение от Van111 Посмотреть сообщение
ну если память не изменяет то fgetc
как именно посмотри мой код можите изменить и показать наглядно?
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 12
14.10.2011, 17:54 #22
ну может так
char s[3]=0;
for(int i=0;i<3;i++)
{
s[i]=fgetc(f);
fcgets(0,1000,f)
}
ну проверь это

Добавлено через 9 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
   FILE *f;
    f=fopen("c:\\keys.txt","rt");
    std::cout << f;
    char s[3],ss[100];
    for(int i =0;i<3;i++)
    {
    s[i]=fgetc(f);
    fgets(ss,100,f);
    }
    s[3]=0;
    std::cout <<s; 
    getch();
    return 0;
вот рабочий код

Добавлено через 1 минуту
так как я не нашёл дыру в которую можно было просто выплюнуть даные которые получает функция fgets то я создал строку s[100]

Добавлено через 2 минуты
Цитата Сообщение от Van111 Посмотреть сообщение
так как я не нашёл дыру в которую можно было просто выплюнуть даные которые получает функция fgets то я создал строку s[100]
а некто не знает что можно передать функции fgets в качестве первого параметра ну я имею в виду какой нибудь левый адрес
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
14.10.2011, 18:01 #23
C
1
2
3
FILE* fp = /* ... */;
int c;
fscanf(fp, "%d", &c);
0
Евгений М.
1036 / 977 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
14.10.2011, 18:04 #24
Nameless One, Вы наверно fscanf хотели, а не fgets.
1
Nameless One
14.10.2011, 18:07
  #25

Не по теме:

Да, спасибо, поправил

0
lexflax
11 / 11 / 1
Регистрация: 03.04.2011
Сообщений: 627
15.10.2011, 08:31  [ТС] #26
Цитата Сообщение от Nameless One Посмотреть сообщение
&c
а зачем перед с знак оперсанда? она же вроде не задавалась как указатель
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
15.10.2011, 14:55 #27
Цитата Сообщение от lexflax Посмотреть сообщение
а зачем перед с знак оперсанда?
Потому что в функцию передаётся адрес переменной, чтобы извне по этому адресу можно было изменить значение этой переменной.

Цитата Сообщение от lexflax Посмотреть сообщение
она же вроде не задавалась как указатель
& к указателям не имеет никакого отношения. Эта операция возвращает адрес переменной, а адрес можно взять как у обычной переменной, так и у указателя. Вот с разыменованием (операция *) будт проблемы, она может применяться только к указателям.
0
15.10.2011, 14:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2011, 14:55
Привет! Вот еще темы с ответами:

Как использовать функцию getline - C++
есть программа структура о книгах, с поиском по дате из-за функции cin можно ввести только одно слово так как после пробела cin не...

Как использовать функцию НОРМСТРАСП - C++
как эту функцию записать в с++ ??

Не понимаю как использовать функцию getchar() - C++
Мне нужно что бы при нажатий на определенную клавишу прога выходила из консоли, это мая первая программка. Конечно не обязательно что бы...

Как использовать консольную функцию GetCurrentConsoleFont ? - C++
Доброго времени всем! У меня Visual C++ 6.0 и ОС -XP Пож. Помогите разобраться с использованием консольной функции API ...


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

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

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