Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2016, 08:40   #1
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию Подсчет количества смены знака в последовательности чисел (Си)

Не смогла разобраться с функцией ungetc(). Помогите , пожалуйста, вот код программы, где я допускаю ошибку?? Чего не хватает?
Я вот считываю числа с файла, но каждую вторую не возвращаю обратно, то есть пытаюсь вернуть с помощью этой функции:
Код:
while (fscanf(file, "%d", &a) != EOF)
	{
		printf("%d", a);
		ungetc(c, file);
		if (fscanf(file, "%d", &a) != 1) return NO_NOMBERS;
	}
Вот код программы:
Код:
#include <stdio.h>
#include <math.h>
#define NO_FILE -1
#define NO_NOMBERS 1
#define OK 0

int process(FILE* file, int* kol_pol)
{
	// если файла не существует - возвращает значение -1
	if (file == NULL) return NO_FILE;
	int a; //число в файле
	int num1, num2;
	int otr1, otr2;
	char c;
	rewind(file);
	// Если в файле не число - то возвращает значение 1
	while (fscanf(file, "%d", &a) != EOF)
	{
		ungetc(c, file);
		if (fscanf(file, "%d", &a) != 1) return NO_NOMBERS;
	}
	// если в файле все числа, то найдем количество смены знака
	// считываем число с файла и определяем , положительное ли оно
	rewind(file);
	fscanf(file, "%d", &a);
	num1 = a;
	(num1 >= 0) ? (otr1 = 1) : (otr1 = -1);
	while (fscanf(file, "%d", &a) != EOF)
	{
		num2 = a;
		(num2 >= 0) ? (otr2 = 1) : (otr2 = -1);
		if (otr1*otr2 == -1)  (*kol_pol)++;
		num1 = num2;
		otr1 = otr2;
	}
	return OK;
}

int main(void)
{
	int kol_pol = 0;

	FILE *fin;

	// ввод из файла
	fin = fopen ( "C:/c/test.txt", "r" );
	if (fin == NULL) printf("Error");

	process(fin, &kol_pol);
	printf("%s %d %s", "count = ", kol_pol, "\n");
	getchar();

	return OK;
}
zaira001002 вне форума Ответить с цитированием
Старый 04.07.2016, 09:29   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Как звучит задание в оригинале?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 04.07.2016, 09:38   #3
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

с ПРИМЕРОМ СРАВНИ КАЖДУЮ ФУНЦКЦИЮ

http://cppstudio.com/post/1644/
ura_111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет количества смены знака в последовательности чисел (Си) zaira001002 Помощь студентам 0 23.06.2016 19:45
Нахождение количества смены знака (по Си) zaira001002 Помощь студентам 1 09.07.2015 14:55
в непустой последовательности целых чисел определить количество смен знака числа (Delphi) shalgan Помощь студентам 14 25.02.2014 18:29
последовательности a(1)...a(n) определить число соседств двух чисел разного знака (написать код на visual basic) эленька Помощь студентам 0 25.04.2013 02:25
Поиск смены знака Franky21 Общие вопросы C/C++ 5 09.03.2010 00:35