Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Zai
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 33
1

Почему пробел все портит?

15.06.2015, 15:26. Просмотров 830. Ответов 5
Метки нет (Все метки)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
 
 int main (){
 
    float var1,var2,result;
    char choice;
    do{
    printf("Enter your first number :");
    scanf(" %f", &var1);
    printf("Enter your second number :");
    scanf(" %f", &var2);
 
    result = var1 * var2;
    printf(" %.2f times %.2f equals to %.2f.\n\n",var1,var2,result );
 
    printf("do you want to enter another pair of numbers \n");
    printf(" to multiply (Y/N): ");
    scanf("%c", &choice);
 
    if(choice == 'n'){
        choice = 'N';
    }
    }while(choice != 'N');
    return 0;
 
}
Output тут следующий
Enter your first number (number)
Enter your second number (Number)
Потом умножение, и предложение ввести еще раз
Но суть в том, что если оставить код как есть, то после фразы To multiply (Y/N) будет выведено предложение
Enter your first number.А логика такая, что это должно появиться, только после вводы символа, кроме n.
Я разобрался, почему так.
Нужен пробел, перед scanf("Пробел%с",%choice).
Может кто-нибудь объяснить логику С?
Почему один пробел в ключевом месте, портит всю картину?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2015, 15:26
Ответы с готовыми решениями:

Заменить все звездочки на пробел
Необходимо, используя динамическую память в текстовом файле неизвестного размера заменить все * на...

В введенном тексте заменить все цифры на пробел
написать программу которая в введенном тексте заменяет все цифры на пробел

Ввести строку с клавиатуры. Заменить все пробелы идущие подряд на один пробел
Ввести строку с клавиатуры. Заменить все пробелы идущие подряд на один пробел. Прошу помощи, т.к....

Построить новую строку, в которой соединены через пробел все дополнительные параметры в обратном порядке
Построить новую строку, в которой соединены через пробел все дополнитель- ные параметры в обратном...

В шаблоне пробел, который портит всю картину дизайна
Не могу понять что за ерундистика . Шаблон сползает , точнее шапка на 5px или более ... не важно...

5
Справлюсь
23 / 23 / 14
Регистрация: 24.07.2014
Сообщений: 209
15.06.2015, 15:36 2
странно...
0
HighPredator
5693 / 2014 / 723
Регистрация: 10.12.2010
Сообщений: 5,787
Записей в блоге: 3
15.06.2015, 15:52 3
Это происходит потому, что после ввода, символ перевода строки, попадающий в поток ввода после нажатия энтера в строке 11, там и остается. Далее он попадает на следующий сканф, и уже трактуется как choice != 'N'. Пробел в форматной строке сканф-а в свою очередь заставляет эту функцию пропускать пробелы и символы перевода строки, которые могли остаться в потоке, и читать, что нужно.
0
Zai
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 33
15.06.2015, 15:58  [ТС] 4
я раз 20 прочитал, и ничего не понял.
0
HighPredator
5693 / 2014 / 723
Регистрация: 10.12.2010
Сообщений: 5,787
Записей в блоге: 3
15.06.2015, 16:07 5
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

C
1
scanf(" %f", &var2);
Вводим 123.456. Нажимаем энтер. Все число ввелось. С потоком ввода в этот момент происходит следующее:
Код
[1][2][3][.][4][5][6][\n] <<--- поступило в поток
[1][2][3][.][4][5][6] --->> извлечено из потока и отправлено в переменную --->> var2 = 123.456
[\n] --->> осталось в потоке в виде символа
Так вот этот перевод строки (энтер). Топает дальше до следующего сканф-а в строке 18. И, поскольку, это символ, сканф берет его прямо из потока, считая, что ввод выполнен. Со всеми вытекающими. Прояснилось?
0
Zai
0 / 0 / 0
Регистрация: 15.06.2015
Сообщений: 33
15.06.2015, 16:40  [ТС] 6
вот сейчас да.
Я кстати в java видел похожую вещь.Там нужно было игнорировать перевод строки в консоли, что бы дважды не выводился output.Но я особо не разобрался и решил, что вернусь к этому позже.А судя по всему, разобраться все таки придется.
Но вы прояснили ситуацию, я спокойнее стал.
0
15.06.2015, 16:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2015, 16:40

Почему GET портит URL
Прилагается 2 изображения на втором фото я ожидаю URL:...

Тег <pre> портит все(
Добрый день! я оформляю отображение кода для сайта с помощью плагина highlight. Чтобы код...

Что портит сразу все avi-файлы?
Скачал торрентом кучу мультиков. Через какое-то время размеры всех avi-файлов уменьшились до...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru