ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

25.12.2005, 15:01
|
|
Участник форума
Регистрация: 13.10.2005
Сообщений: 210
Провел на форуме: 371736
Репутация:
14
|
|
Господа, я наверно мало внимания уделил постановке задачи, когда писал пост, но нужно просто
Сообщение от Meister
...Написать функцию для определения есть ли среди них число у которого равны сумма цифр целой и дробной части"
И я говорю именно, что у меня получилось только по каждому числу, а мне надо в общем, есль ли ли такое число в файле, или нет. И на экран вывести Да или Нет. Димеру и Мумику по плюсу за желание мне помочь.
Да кстати, Димер, щас проверил твою прогу, просто черныый экран вылетает и сворачивается обратно, прога завершается. Мы делаем в такой среде: File >> New >> Other >> Console Wizard >> Галочки на C++ только оставить.
Последний раз редактировалось Meister; 25.12.2005 в 15:15..
|
|
|

25.12.2005, 17:02
|
|
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
Провел на форуме: 3730496
Репутация:
519
|
|
а мне надо в общем, есль ли ли такое число в файле, или нет
ну переделать не проблема:
Код:
#include <stdio.h>
#include <conio.h>
// Функция возвращает:
// 1 - если в файле есть число у которого равны сумма цифр целой и дробной части
// 0 - если этого числа нет
// -1 - ошибка I/O
int exists(const char* file_name)
{
FILE *f;
char ch; // текущий считываемый символ
int left = 0; // сумма цифр левее запятой
int right = 0; // сумма цифр правее запятой
int comma = 0;
if ((f = fopen(file_name, "rt"))== NULL)
{
fprintf(stderr, "Cannot open input file.\n");
return -1;
}
while (!feof(f))
{
fscanf(f, "%c", &ch); // будем читать посимвольно
if (ch=='.')
{
comma = 1; // готовимся к обработке цифр правее запятой
continue; // пропускаем все оставшиеся действие цикла и становимся на следующий шаг
}
if ((ch>='0') && (ch<='9') && (comma == 0))
left += int (ch) - 48; // int (ch) - ASCII код символа, int('0')=48 ... int('9')=57
if ((ch>='0') && (ch<='9') && comma)
right += int (ch) - 48;
if (ch == '\n') // если текущий символ - конец строки
{
if (left==right) return 1;
left=right=comma=0;
}
}
fclose(f);
return 0;
}
int main()
{
char file_name[255];
printf("Enter filename:");
scanf("%s", &file_name);
switch (exists(file_name))
{
case 1: printf("YES"); break;
case 0: printf("NO"); break;
default: printf("I/O Error"); break;
}
getch();
return 0;
}
компилится и работает без проблем в TC++ и Visual Studio
|
|
|

25.12.2005, 17:38
|
|
Участник форума
Регистрация: 13.10.2005
Сообщений: 210
Провел на форуме: 371736
Репутация:
14
|
|
Как-то он по разному отвечает, например на числа
11.12
23.34
12.12
отвечает
NO
Это же не может быть связано с тем, что я использую C++ Builder 6?
|
|
|

25.12.2005, 22:38
|
|
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
Провел на форуме: 3730496
Репутация:
519
|
|
Сообщение от Meister
Как-то он по разному отвечает, например на числа
11.12
23.34
12.12
отвечает
NO
Это же не может быть связано с тем, что я использую C++ Builder 6?
после последнего номера в файле надо нажать <Enter>

|
|
|

26.12.2005, 01:02
|
|
Участник форума
Регистрация: 13.10.2005
Сообщений: 210
Провел на форуме: 371736
Репутация:
14
|
|
Deem3n® А почему так получается, что если ентер в конце есть, то всегда Yes?
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|