Форум «Всё о Паскале» _ Ада и другие языки _ Чтение из файла (С++)
Автор: lays 3.06.2006 21:06
Помогите pliz написать программу, которая читает данные из файла с расширением *DAT, выводит текст на экран и считает, сколько слов в тексте начинаются и заканчиваются на одну и ту же букву. Очень срочно, надо сдать 7 задач не успеваю написать все…=-О ОЧЕНЬ НУЖНА ПОМОЩЬ...
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
Спасибо, выручил.
Тока поясни 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?
Автор: volvo 4.06.2006 14:24
Символ с кодом 13 - возврат каретки, 10 - перевод строки (в текстовых файлах каждая строки завершается этими двумя символами, иначе ты бы видел содержимое текстовых файлов растянутым в одну строку)
Автор: ol'ga 1.08.2006 14:53
Цитата
if (c == ' ' || c == 13 || c == 10)
а можно как-нибудь иначе сделать? в С/С++ разве нет функции которая эту проверку делает сама?
Автор: 0xDEAD 1.08.2006 15:21
Цитата
а можно как-нибудь иначе сделать? в С/С++ разве нет функции которая эту проверку делает сама? unsure.gif unsure.gif
bool isspace(char arg)
Она возвращает true, если символ является пробелом, табуляцией или символом новой строки.
Автор: Гость 1.08.2006 15:48
0xDEAD как ей воспользоваться в программе не подскажешь
Автор: 0xDEAD 1.08.2006 15:52
Вместо
if (c == ' ' || c == 13 || c == 10)
написать
if (isspace( c )) ...
Автор: 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? дайте пожалуйста полный внятный ответ...
Автор: 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 - беззнаковый тип...