IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> Чтение из файла (С++), очень нужно...
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


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


Пионер
**

Группа: Пользователи
Сообщений: 114
Пол: Мужской
Реальное имя: Ден

Репутация: -  0  +


#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;
}


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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


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

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


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



И еще как t изменяется, если мы его вначале приравняли к нулю, а в цикле оно вроде не меняется? Заранее спасибо. ))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


Спасиб.

Тока всё равно не догоняю на что проверяется вот это:
if (c == '  ' || c == 13 || c == 10)
?
Что такео 13 и 10? unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






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





Группа: Пользователи
Сообщений: 2
Пол: Женский
Реальное имя: Оля

Репутация: -  0  +


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

а можно как-нибудь иначе сделать? в С/С++ разве нет функции которая эту проверку делает сама? unsure.gif unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 8
Пол: Мужской
Реальное имя: Alexander

Репутация: -  0  +


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

bool isspace(char arg)

Она возвращает true, если символ является пробелом, табуляцией или символом новой строки.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






0xDEAD
как ей воспользоваться в программе не подскажешь wub.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





Группа: Пользователи
Сообщений: 8
Пол: Мужской
Реальное имя: Alexander

Репутация: -  0  +


Вместо
 if (c == ' ' || c == 13 || c == 10)

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


smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






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

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


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


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


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


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


Гость






Цитата
почему тут у "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 - беззнаковый тип...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 23.08.2017 13:04
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"