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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 89, средняя оценка - 4.74
garrybuilder
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 3
#1

Чтение из строк из файла по одному символу - C++

09.04.2009, 17:26. Просмотров 12226. Ответов 11
Метки нет (Все метки)

Всем добрый вечер! Делаю контрольную на С++ и так как никогда не писал на С, (только на паскале и делфи) возникли вопросы.
Вопрос первый. Как читать строку из файла по одному символу за раз? вроде нужно использовать getc или fgetc, но что и как именно использовать? Собственно какая разница между getc и fgetc?
И вообще есть ли какие функции (или комбинации функций) для произвольного чтения символов из текстового файла. Ну например прочитать символ номер N из строки номер M
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2009, 17:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение из строк из файла по одному символу (C++):

Чтение из файла по одному символу - C++
Здравствуйте! Перешел с Pascal но C++. Стоит задача - вывести сумму двух длинных чисел с 30 тыс. раздрядов, т.е. реализовать длинную...

Чтение строк из файла - C++
Есть файл с 10 строками, необходимо вывести на экран четные строки ifstream file("C:\\1.txt"); for (int i = 0; i < 5; i++) { ...

Чтение строк из файла - C++
struct Questions { char quest; }QuestList; void main() { int numQuest=0; FILE *fp; fp = fopen("voprosy.txt",...

Чтение строк из файла - C++
Добрый день имеется ряд вопросов касательно чтения строк из текстового файла. В папке с программой содержится файл TEST.TXT, в котором...

Чтение строк из файла - C++
Мне нужно читать строки из фалйа разной длинны тоесть может быть вобще пустая строка. нужно именно c++ не c

Чтение из файла определеных строк - C++
Здравствуйте. Как реализовать чтение из файла (например: каждой 3 и каждой 7 строки )

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
10.04.2009, 01:01 #2
fgetc - функция
getc - может быть функцией а может быть макросом (в случае когда макрос, ей нельзя передавать выражения типа fp++, так как они будут вычисляться два раза внутри макроса), макрос работает быстрее, так как его содержимое вставляется перед компиляцией в код
то есть можешь юзать getc или fgetc, когда у тебя нет выражений с вычислениями для файлового указателя, иначе юзать только fgetc, так как она вычисляет всё перед входом

для произвольного чтения символов из текстового файла
есть функция fseek для перемещение указателя в файле в любую сторону, куда переместишь, оттуда и будет чтение для любой функции чтения из файла
0
garrybuilder
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 3
10.04.2009, 23:09  [ТС] #3
насчет fseek я знаю что это перемещает указатель на указанную позицию, ну вот как прочитать символ с этой указанной позиции? getc или fgetc? что лучше? что такое макрос имею смутное представление... пробовал и то и другое - ошибки
если можно приведите плиз пример простого кода
0
Mecid
680 / 229 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
10.04.2009, 23:13 #4
из файла читает fgetc
0
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
10.04.2009, 23:20 #5
Цитата Сообщение от garrybuilder Посмотреть сообщение
насчет fseek я знаю что это перемещает указатель на указанную позицию, ну вот как прочитать символ с этой указанной позиции? getc или fgetc? что лучше? что такое макрос имею смутное представление... пробовал и то и другое - ошибки
если можно приведите плиз пример простого кода
Смещаешь fseek'ом файловый указатель на нужную позицию и читаешь через getc или fgetc:
C
1
2
3
4
5
int c;
FILE *fp;
.....
while( (c = getc(fp)) != EOF)
   putchar(c);
Будет выводит символы из файла (с позиции, на которую указывает fp) на экран.
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.04.2009, 02:12 #6
читает файл с определённой позиции
0
Вложения
Тип файла: zip file_position.zip (545 байт, 214 просмотров)
garrybuilder
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 3
11.04.2009, 23:43  [ТС] #7
Так как консольного С++ у меня нету, поэтому пробую в С++ Builder 6, там выбираю консольное приложение. Попробовал вставить туда код из последнего сообщения

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
 
/* читает файл с определённой позиции и выводит */
main()
{
    FILE *fp;
    int c;
 
    if ((fp = fopen("E:\file.txt", "rb")) == NULL)
        return 1;
    fseek(fp, 2, SEEK_SET);
    while ((c = getc(fp)) != EOF)
        cout << c;
    fclose(fp);
    return 0;
}
Правда заменил putchar(c) на cout << c, так как putchar пишет ошибку:
[C++ Fatal Error] Unit1.cpp(17): F1004 Internal compiler error at 0xc7d0c8 with base 0xc10000
Понятия не имею што это значит, но выглядит страшно
Заменил на cout << c теперь пишет:
[C++ Error] Unit1.cpp(17): E2451 Undefined symbol 'cout'

Вроде как просит библиотеку подключить тока не знаю какую,
пробовал добавлять
#include <iostream.h>
#include <fstream.h>
#include <iostream>
в результате ещё больше ошибок
Ну и адрес файла заменил тоже.
Что посоветуете еще?
з.ы. Посоветуйте где лучше писать консольные проги? В builder'е видимо это будет сложнее сделать?
0
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
11.04.2009, 23:45 #8
Подключай <iostream>, без .h.
И после инклудов пропиши using namespace std;
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.04.2009, 00:11 #9
Код
"E:\file.txt"
это тоже неправильно, надо \\

компилятор установи
если пишешь на C++, для выполнения C кода подключи <cstdio> с .h или без .h, в Builder'е с .h обычно
это при условии, что он stdio.h не находит
0
Mecid
680 / 229 / 4
Регистрация: 15.10.2007
Сообщений: 1,247
12.04.2009, 01:36 #10
если пишеш на C++ то надо using namespace std;
и подключать так #include <cstdlib>
если на чистом Си то #include <stdlib.h>
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.04.2009, 04:25 #11
Цитата Сообщение от Mecid
если пишеш на C++ то надо using namespace std;
это когда cout юзает
0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
01.02.2011, 19:53 #12
а разве fgetc родом не из си? возможно ли прочитать первый символ в файле используя fstream?

Добавлено через 8 минут

Не по теме:

извините, разобрался...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2011, 19:53
Привет! Вот еще темы с ответами:

Чтение из файла в массив строк - C++
Всем добра! Пишу с таким вопросом: есть файл с текстом, длины строк не известны, надо задать динамический массив string (ну чтобы можно...

Чтение строк из бинарного файла. - C++
Вот как происходит запись строк pr.login и pr.password: FILE *f; f=fopen(path,&quot;ab&quot;); if (f!=NULL) { cout&lt;&lt;&quot;Файл концигурации...

Чтение файла в массив строк - C++
Доброго времени суток!!! Как считать файл в массив строк? Заранее спасибо!!!

Чтение из файла (массив строк) - C++
Здравствуйте, не могли бы вы мне помочь, есть данная задача Реализовать структуру «Ticket» – билет на самолет, содержащую информацию о...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.02.2011, 19:53
Ответ Создать тему
Опции темы

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