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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2010, 10:01   #1
Дырдин
Пользователь
 
Аватар для Дырдин
 
Регистрация: 26.09.2009
Сообщений: 81
По умолчанию Зловещий Backspase

Нужно, чтобы вводимый в консоли пароль отображался звёздочками. С этим всё нормально. Но вот клавиша backspace работает не по назначению(предыдущий символ не стирается). Помогите с решением
Код:
// Лабораторная 1 Семестр 2.cpp: главный файл проекта.

# include "stdafx.h"
# include <conio.h>
# include <stdio.h>
# include <locale.h>
# include <math.h>

char main ()
{
	char *username,pas[1000];
	int str;
	setlocale (LC_ALL,"Russian");
	printf("Введите имя пользователя = ");
	scanf ("%s",&username);
	printf("Введите пароль = ");
	for(int i = 0;i < 8;i++)
	{
		pas[i]= getch();
		if(pas[i]!=8)
		{
			if(pas[i] != '8')	printf("*");
		}
		else i--;
		{
			pas[8] = '\0';
		}
	}
	printf("\n\n%s", pas);
	return 0;
	getch ();
}

З.Ы.: Может кто знает, как остановить ввод пароля нажатием enter(аски-код не помогает)

Последний раз редактировалось Дырдин; 18.02.2010 в 10:03.
Дырдин вне форума Ответить с цитированием
Старый 18.02.2010, 11:23   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Дырдин Посмотреть сообщение
кто знает, как остановить ввод пароля нажатием enter(аски-код не помогает)
Анализируйте введённый символ на равенство (неравенство) '\r' (Юникс не трогаем пока...).

Разберитесь в чём разница между '8' и 8. А вообще-то, чтобы не забивать голову кодами, BS в C это '\b'.

На вот эту свою шедевральную ветку else
Код:
		else i--;
		{
			pas[8] = '\0';
		}
тоже посмотрите...

Ну и подумайте, разрешаете ли Вы в пароле всякие скобки, стрЕлки, знаки вопроса и т.п...
Vago вне форума Ответить с цитированием
Старый 18.02.2010, 11:37   #3
Дырдин
Пользователь
 
Аватар для Дырдин
 
Регистрация: 26.09.2009
Сообщений: 81
По умолчанию

Цитата:
Разберитесь в чём разница между '8' и 8. А вообще-то, чтобы не забивать голову кодами, BS в C это '\b'.
'8' - аски код backspace;
8 - длина пароля.
Дырдин вне форума Ответить с цитированием
Старый 18.02.2010, 11:47   #4
Дырдин
Пользователь
 
Аватар для Дырдин
 
Регистрация: 26.09.2009
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
На вот эту свою шедевральную ветку else
Код:
		else i--;
		{
			pas[8] = '\0';
		}
тоже посмотрите...
За этот момент сорри... Остатки прежнего кода
Вот как сейчас
Код:
	for(int i = 0;i < 8;i++)
	{
		pas[i]= getch();
		if(pas[i]!=8)
		{
			if(pas[i] != '8')	printf("*");
		}
		else
		{
			pas[i] = '\b';
			i--;
		}
		pas[8] = '\0';
	}
Код:
pas[i] = '\b';
Совершенно не помогает

Цитата:
Ну и подумайте, разрешаете ли Вы в пароле всякие скобки, стрЕлки, знаки вопроса и т.п...
Нет. В пароле только буквы и цифры



Я надеялся, что мне поскажут функцию для перерисовки экрана(при нажатие BS), или хотя бы библиотеку, в которой её можно найти




Всё. Разобрался.Спасибо

Последний раз редактировалось Дырдин; 18.02.2010 в 12:01.
Дырдин вне форума Ответить с цитированием
Старый 18.02.2010, 12:55   #5
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Дырдин Посмотреть сообщение
'8' - аски код backspace
Может, всё-таки, стОит K&R хоть раз прочесть, а?...
Vago вне форума Ответить с цитированием
Старый 20.02.2010, 20:11   #6
Plastilin
Новичок
Джуниор
 
Регистрация: 20.02.2010
Сообщений: 2
По умолчанию

Привет! у меня с++ работает нормально, но когда дело доходит до вычислений, он не считает и ничё не выводит. Если кто-нибудь знает в чём дело , буду очень рад))
Спасибо!
Plastilin вне форума Ответить с цитированием
Ответ


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