
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
|
|
|