Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Чтение из файла (С++)

Автор: lays 3.06.2006 21:06

Помогите pliz написать программу, которая читает данные из файла с расширением *DAT, выводит текст на экран и считает, сколько слов в тексте начинаются и заканчиваются на одну и ту же букву. Очень срочно, надо сдать 7 задач не успеваю написать все…=-О ОЧЕНЬ НУЖНА ПОМОЩЬ... mega_chok.gif mega_chok.gif

Автор: Merlin 3.06.2006 22:18

#include <stdio.h>
#include <conio.h>
#include <iostream.h>

int main(){
char filename[256];
char str[1024];
FILE *in;
int c , cnt, t;
printf("File Name: ");
scanf("%s", filename);
in = fopen(filename, "r");
t = cnt = 0;
cout<<"\n == Исходный текст =="<<endl;
while ((c = fgetc(in)) != EOF)
{
printf("%c",c);
if (c == ' ' || c == 13 || c == 10)
{
if (t > 0 && (str[0] == str[t - 1]))
cnt++;
t = 0;
}
else
str[t++] = c;
}
cout<<"========="<<endl;
{printf("%s\n", str);}
fclose(in);
if (t > 0 && (str[0] == str[t - 1]))
cnt++;
printf("\n cnt: %i\n", cnt);
getche();
return 0;
}


У меня была такая же задача...тольок с текстовым файлом..

Автор: lays 4.06.2006 2:08

Спасибо, выручил. smile.gif

Тока поясни pliz (я с файлами и строками пока мало работал), что значит вот этот код:


if (c == ' ' || c == 13 || c == 10)
{
if (t > 0 && (str[0] == str[t - 1]))



И еще как t изменяется, если мы его вначале приравняли к нулю, а в цикле оно вроде не меняется? Заранее спасибо. ))

Автор: volvo 4.06.2006 2:35

Цитата(lays @ 3.06.2006 22:08)
как t изменяется, если мы его вначале приравняли к нулю, а в цикле оно вроде не меняется?
Меняется...
str[t++] = c; // <-- Здесь... 
Сначала очередному символу строки присваивается значение с, а потом t увеличивается на 1-цу

Автор: lays 4.06.2006 14:19

Спасиб.

Тока всё равно не догоняю на что проверяется вот это:

if (c == '  ' || c == 13 || c == 10)
?
Что такео 13 и 10? unsure.gif

Автор: volvo 4.06.2006 14:24

Символ с кодом 13 - возврат каретки, 10 - перевод строки (в текстовых файлах каждая строки завершается этими двумя символами, иначе ты бы видел содержимое текстовых файлов растянутым в одну строку)

Автор: ol'ga 1.08.2006 14:53

Цитата
if (c == ' ' || c == 13 || c == 10)

а можно как-нибудь иначе сделать? в С/С++ разве нет функции которая эту проверку делает сама? unsure.gif unsure.gif

Автор: 0xDEAD 1.08.2006 15:21

Цитата
а можно как-нибудь иначе сделать? в С/С++ разве нет функции которая эту проверку делает сама? unsure.gif unsure.gif

bool isspace(char arg)

Она возвращает true, если символ является пробелом, табуляцией или символом новой строки.

Автор: Гость 1.08.2006 15:48

0xDEAD
как ей воспользоваться в программе не подскажешь wub.gif

Автор: 0xDEAD 1.08.2006 15:52

Вместо

 if (c == ' ' || c == 13 || c == 10)

написать
if  (isspace( c ))
...


smile.gif

Автор: volvo 1.08.2006 19:39

Цитата(Гость @ 1.08.2006 11:48)
как ей воспользоваться в программе не подскажешь

Для этого вообще-то желательно знать, каким компилятором ты пользуешься... Подключи
#include <ctype.h>


Кстати, 0xDEAD, вышесказанное и к тебе тоже относится: в Turbo C 3.0, например, вообще нет типа bool, в следующий раз будь внимательнее...

Автор: lays 18.09.2006 23:12

while ((c = fgetc(in)) != EOF)


объясните мне плиз, почему тут у "c" тип данных int, а не char.
я знаю, что так не пройдет, НО понять ПОЧЕМУ не могу? Что-то связано со сравнением "!=EOF", ведь EOF == -1?
дайте пожалуйста полный внятный ответ...smile.gif

Автор: volvo 18.09.2006 23:20

Цитата
почему тут у "c" тип данных int, а не char.
Потому, что fgetc возвращает int, а не char:
Цитата(TC Help)

fgetc, fputc <STDIO.H>
■ fgetc gets a character from a stream
■ fputc outputs a character to a stream

Declaration:
int fgetc(FILE *stream);
int fputc(int c, FILE *stream);
тем более, что EOF это -1, а char - беззнаковый тип...