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

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

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

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

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

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

Подскажите, где ошибка? Просто не читает последнее число в файле... Потому выдает результат 3 раза сменился знак, вместо 4х ... В файле написано : -1 4 -6 8 -3 . Думаю, что не читает -3, или читает, но цикл останавливается... потому и count возвращает значение 3 вместо 4. Вот кусок программы...
Код:
    int otr1, otr2; // возвращает значение 1 , если число отрицательное
    int num1, num2; // числа файла
    *count = 0; // количество смены знака     
...
        fscanf(f, "%i", &num1);
        if (num1 < 0)
            otr1 = 1;
        else
            otr1 = 0;
        // пока не достигли конца файла, начиная со 2 го числа , ищем count
        while (fscanf(f,"%i", &num2) != EOF)
        {
         if (num2 <0)
             otr2 = 1;
         else
             otr2 = 0;
         // если текущее число отлично по знаку от предыдущего , то значение count++
         if (otr1 != otr2)
             *count = *count + 1;
         // запоминаем что текущее число имеет значение otr2 = otr1 , для следующего числа 
         otr1 = otr2;

        }
zaira001002 вне форума Ответить с цитированием
Старый 09.07.2015, 14:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
(fscanf(f,"%i", &num2) != EOF)
http://www.cplusplus.com/reference/c...nf/?kw=fscanf:
Цитата:
On success, the function returns the number of items of the argument list successfully filled.
Так что я бы не сравнивал с EOF результат этой функции, используя вместо нее feof(), в fscanf() вынес бы в тело цикла.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поменять нахождение min среди двумерного массива, на нахождение min в каждой сточке admokep Общие вопросы C/C++ 1 10.01.2015 09:48
httppost и отображение знака & как знака? maloy_ya Работа с сетью в Delphi 4 12.03.2012 20:47
Поиск смены знака Franky21 Общие вопросы C/C++ 5 09.03.2010 00:35
Подсчитать количества знака в числе valerij Microsoft Office Excel 5 17.08.2008 16:52
Нахождение количества понедельников в XX веке Omedus Паскаль, Turbo Pascal, PascalABC.NET 5 28.11.2007 22:17