Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Си. Цикл, символы  (Прочитано 12569 раз)
0 Пользователей и 1 Гость смотрят эту тему.
qqq121
Читатель

ru
Offline Offline

« : 24-10-2017 15:54 » 

//дана последовательность типа a1+-a2+-a3...+-an. Необходимо найти сумму. Я ввожу её посимвольно.
Не могу понять в чём ошибка... Неправильно подсчитывает сумму и завершает цикл при вводе двух точек, а не одной.
Код: (C)
#include <stdio.h>
#include <conio.h>

int main(void)
{
        int sum;
        char d, c;
        printf("Enter a number ");
        scanf_s("%c", &d);
        printf("Enter sign ");
        scanf_s("%c", &c);
        d = d - '0';
        sum = d;

        do
        {
                scanf_s("%c", &d);
                if (c == '+')
                {
                        d = d - '0';
                        sum += d;
                }
                else
                {
                        d = d - '0';
                        sum -= d;
                }
                scanf_s("%c", &c);
        } while (c != '.');
        printf("%i", sum);

        _getch();
        return 0;
}
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 24-10-2017 16:06 » 

Ты читаеш посимвольно. И тут не важно, сколько раз ты ввел точку. Все равно считается только одна точка. Думаю, что первый твой вопрос также на этом застревает.
« Последнее редактирование: 24-10-2017 16:09 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
qqq121
Читатель

ru
Offline Offline

« Ответ #2 : 24-10-2017 16:19 » 

И тут не важно, сколько раз ты ввел точку. Все равно считается только одна точка. Думаю, что первый твой вопрос также на этом застревает.
Мне, к сожалению, важно чтобы вводилась одна точка и цикл завершался. Если я ввожу по одной точке 10 раз, он не завершается...
Почему он неправильно считает сумму, я не понимаю, тк в принципе формулы верные. А ошибку, при наличии, найти не могу(
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 24-10-2017 16:42 » 

Сейчас в дебагере прогнал. При нажатии Enter программа его оставлет в буфере клавиатуры. И при следуюшем сканировании загоняет его в твои переменные. Отсюда и пляски.
« Последнее редактирование: 24-10-2017 16:44 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 24-10-2017 17:12 » 

Как я понял нужен фильтр ввода? Почему бы не отказаться от scanf() и его разновидностей в пользу fread(&dst, 1, 1, stdin) и спокойно фильтровать числа? В том числе от клавиш "Enter" 0x0A и "Backspace" 0x08, если не ошибаюсь. Таким подходом можно сделать монолитный ввод нужного или произвольного числа цифр, например через пробел.
Записан
qqq121
Читатель

ru
Offline Offline

« Ответ #5 : 25-10-2017 02:15 » new

Finch, Aether, Задача корректна!)) Просто я в ночи затупил и ввод делал по символьно, а надо сразу всю последовательность вводить сразу.

Добавлено через 19 секунд:
Спасибо вам за ответы и помощь!

Добавлено через 46 минут и 9 секунд:
Программа, конечно, а не задача))
« Последнее редактирование: 25-10-2017 03:01 от qqq121 » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines