Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
Неотложка
(Модераторы:
Алексей++
,
Sla
) > Тема:
Си. Цикл, символы
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Си. Цикл, символы (Прочитано 12706 раз)
0 Пользователей и 1 Гость смотрят эту тему.
qqq121
Читатель
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
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
Re: Си. Цикл, символы
«
Ответ #1 :
24-10-2017 16:06 »
Ты читаеш посимвольно. И тут не важно, сколько раз ты ввел точку. Все равно считается только одна точка. Думаю, что первый твой вопрос также на этом застревает.
«
Последнее редактирование: 24-10-2017 16:09 от Finch
»
Записан
Не будите спашяго дракона.
Джаффар (Коша)
qqq121
Читатель
Offline
Re: Си. Цикл, символы
«
Ответ #2 :
24-10-2017 16:19 »
Цитата: Finch от 24-10-2017 16:06
И тут не важно, сколько раз ты ввел точку. Все равно считается только одна точка. Думаю, что первый твой вопрос также на этом застревает.
Мне, к сожалению, важно чтобы вводилась одна точка и цикл завершался. Если я ввожу по одной точке 10 раз, он не завершается...
Почему он неправильно считает сумму, я не понимаю, тк в принципе формулы верные. А ошибку, при наличии, найти не могу(
Записан
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
Re: Си. Цикл, символы
«
Ответ #3 :
24-10-2017 16:42 »
Сейчас в дебагере прогнал. При нажатии Enter программа его оставлет в буфере клавиатуры. И при следуюшем сканировании загоняет его в твои переменные. Отсюда и пляски.
«
Последнее редактирование: 24-10-2017 16:44 от Finch
»
Записан
Не будите спашяго дракона.
Джаффар (Коша)
Aether
Специалист
Offline
Пол:
Re: Си. Цикл, символы
«
Ответ #4 :
24-10-2017 17:12 »
Как я понял нужен фильтр ввода? Почему бы не отказаться от scanf() и его разновидностей в пользу fread(&dst, 1, 1, stdin) и спокойно фильтровать числа? В том числе от клавиш "Enter" 0x0A и "Backspace" 0x08, если не ошибаюсь. Таким подходом можно сделать монолитный ввод нужного или произвольного числа цифр, например через пробел.
Записан
qqq121
Читатель
Offline
Re: Си. Цикл, символы
«
Ответ #5 :
25-10-2017 02:15 »
Finch
,
Aether
, Задача корректна!)) Просто я в ночи затупил и ввод делал по символьно, а надо сразу всю последовательность вводить сразу.
Добавлено через 19 секунд:
Спасибо вам за ответы и помощь!
Добавлено через 46 минут и 9 секунд:
Программа, конечно, а не задача))
«
Последнее редактирование: 25-10-2017 03:01 от qqq121
»
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
Неотложка
(Модераторы:
Алексей++
,
Sla
) > Тема:
Си. Цикл, символы
Загружается...