Показать сообщение отдельно

  #12  
Старый 25.12.2005, 17:02
Deem3n®
Постоянный
Регистрация: 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
 
Ответить с цитированием