Форум программистов, компьютерный форум CyberForum.ru

функция scanf() не правильно работает - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
ichigo9911
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 7
26.02.2012, 20:32     функция scanf() не правильно работает #1
Код
#include <stdio.h>
#include <conio.h>
#include <math.h>

int main()
{
	unsigned char c1, c2;
	bool b=true;
	while (b==true) 
	{
		printf("MAIN MENU\n");
		printf("l: left; r: right; q: quit\n");
		scanf("%c", &c1);
		switch (c1)
		{
			case 'q': printf("quiting menu...\n"); b=false; break;
			case 'l':
				{
					printf("LEFT MENU\n");
					printf("select a or b\n");
					scanf("%c", &c2);
					switch (c2)
					{
						case 'a': printf("you choose a\n"); continue;
						case 'b': printf("you choose b\n"); continue;
						default:  printf("you didnt choose a or b!\n"); continue;
					}
				}
			case 'r': 
				printf("RIGHT MENU\n");
				printf("select c or d");
				scanf("%c", &c2);
				switch (c2)
				{
					case 'c': printf("you choose c\n"); continue;
					case 'd': printf("you choose d\n"); continue;
					default:  printf("you didnt choose c or d!\n"); continue;
				}
			default: printf("you must type l or r or q!\n");
		}
	
	}
	
}
Запускаю отладчик, иду построчно, проблема возникает в case l. После выполнения строки scanf("%c", &c2), в переменную с2 записывается значение 10 ""(я так понимаю, 10й код в таблице ascii) без моего участия (т.е. я с клавиатуры ничего не ввожу). Не могу понять че за фигня...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2012, 20:32     функция scanf() не правильно работает
Посмотрите здесь:

C - Функция scanf() C++
Не могу понять почему не работает (или правильно не работает) C++
C++ Не правильно работает функция
C++ не работает scanf в цикле!!!
C++ Функция не правильно работает
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Zhecky
 Аватар для Zhecky
19 / 19 / 2
Регистрация: 13.07.2011
Сообщений: 73
26.02.2012, 20:39     функция scanf() не правильно работает #2
Если Windows 7, то иногда спасает запуск с правами администратора.
ichigo9911
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 7
26.02.2012, 20:43  [ТС]     функция scanf() не правильно работает #3
А если windows xp? Откуда эта ошибка берется?)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
26.02.2012, 20:43     функция scanf() не правильно работает #4
Цитата Сообщение от ichigo9911 Посмотреть сообщение
в переменную с2 записывается значение 10 ""(я так понимаю, 10й код в таблице ascii)
Он же символ перевода строки, оставшийся в потоке ввода после чтения предыдущего значения.

Цитата Сообщение от Zhecky Посмотреть сообщение
Если Windows 7, то иногда спасает запуск с правами администратора.
Хоть с правами системного сервиса какого-нибудь, это тут ни каким боком. В *NIX так же всё будет.
Zhecky
 Аватар для Zhecky
19 / 19 / 2
Регистрация: 13.07.2011
Сообщений: 73
26.02.2012, 20:53     функция scanf() не правильно работает #5
Цитата Сообщение от easybudda Посмотреть сообщение
Он же символ перевода строки, оставшийся в потоке ввода после чтения предыдущего значения.
Действительно, 13 берется а 10 убегает.


Цитата Сообщение от easybudda Посмотреть сообщение
Хоть с правами системного сервиса какого-нибудь, это тут ни каким боком. В *NIX так же всё будет.
Ну не говорите. С getch() всегда проблемы были. Программа консольная, при запуске начинала бесится, будто зажата какая-то клавиша. Если с правами администратора, то работала как нужно.

Добавлено через 3 минуты
К стати, вместо
C
1
scanf("%c", &c1);
можете использовать
C
1
с1 = getch();
Тогда энтер не нужен. А если и нужен, то читать его нужно дважды.
Или проверить, если прочитанный код равен 13, то прочитать еще раз холостым getch();
ichigo9911
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 7
26.02.2012, 21:01  [ТС]     функция scanf() не правильно работает #6
а как сделать, чтоб все работало правильно?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
26.02.2012, 21:14     функция scanf() не правильно работает #7
Введите символ повторно, т.е. продублируйте строку
scanf("%c", &c2);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2012, 21:23     функция scanf() не правильно работает
Еще ссылки по теме:

C++ Функция scanf()
C++ Если предложение начинается с пробелов, считать строку после пробелов. Правильно ли работает функция?
Не работает программа через printf и scanf C++

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

Или воспользуйтесь поиском по форуму:
Zhecky
 Аватар для Zhecky
19 / 19 / 2
Регистрация: 13.07.2011
Сообщений: 73
26.02.2012, 21:23     функция scanf() не правильно работает #8
Цитата Сообщение от ichigo9911 Посмотреть сообщение
а как сделать, чтоб все работало правильно?
Попробуйте использовать getch();
Там enter нажимать не нужно, сработает сразу после нажатой вами буквы.
Yandex
Объявления
26.02.2012, 21:23     функция scanf() не правильно работает
Ответ Создать тему
Опции темы

Текущее время: 21:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru