Помощь - Поиск - Пользователи - Календарь
Полная версия: Чтение из файла (С++)
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
lays
Помогите pliz написать программу, которая читает данные из файла с расширением *DAT, выводит текст на экран и считает, сколько слов в тексте начинаются и заканчиваются на одну и ту же букву. Очень срочно, надо сдать 7 задач не успеваю написать все…=-О ОЧЕНЬ НУЖНА ПОМОЩЬ... mega_chok.gif mega_chok.gif
Merlin
#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
Спасибо, выручил. smile.gif

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


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



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

Тока всё равно не догоняю на что проверяется вот это:
if (c == '  ' || c == 13 || c == 10)
?
Что такео 13 и 10? unsure.gif
volvo
Символ с кодом 13 - возврат каретки, 10 - перевод строки (в текстовых файлах каждая строки завершается этими двумя символами, иначе ты бы видел содержимое текстовых файлов растянутым в одну строку)
ol'ga
Цитата
if (c == ' ' || c == 13 || c == 10)

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

bool isspace(char arg)

Она возвращает true, если символ является пробелом, табуляцией или символом новой строки.
Гость
0xDEAD
как ей воспользоваться в программе не подскажешь wub.gif
0xDEAD
Вместо
 if (c == ' ' || c == 13 || c == 10)

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


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

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


Кстати, 0xDEAD, вышесказанное и к тебе тоже относится: в Turbo C 3.0, например, вообще нет типа bool, в следующий раз будь внимательнее...
lays
while ((c = fgetc(in)) != EOF)


объясните мне плиз, почему тут у "c" тип данных int, а не char.
я знаю, что так не пройдет, НО понять ПОЧЕМУ не могу? Что-то связано со сравнением "!=EOF", ведь EOF == -1?
дайте пожалуйста полный внятный ответ...smile.gif
volvo
Цитата
почему тут у "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 - беззнаковый тип...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.