Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[C++][Problem] Pobieranie danych przed wyświetlonym tekstem


Rekomendowane odpowiedzi

Opublikowano

Witam. To mój pierwszy temat, więc gdyby coś było z nim nie tak, proszę o wyrozumiałość.

 

Czy dałoby się w aplikacji konsolowej C++ zrobić coś takiego:

#include <iostream>
using namespace std;

int main()
{
    cout<<"============================="<<endl;
    cout<<"=                           ="<<endl;
    cout<<"=     LOGIN:                ="<<endl;
    cout<<"=     HASLO:                ="<<endl;
    cout<<"=                           ="<<endl;
    cout<<"============================="<<endl;
}

z tym, że po słowach Login i Hasło użytkownik wprowadzałby dane? Chodzi mi o to, żeby najpierw całe "okno" zostało wyświetlone, a dopiero potem user wpisywał dane. Wsadzenie "w środku" polecenia std::cin nie ma sensu, bo program zatrzyma się tam, dopóki nie wprowadzi się danych.

 

Z góry dzięki za odpowiedzi.

Opublikowano

Możesz próbować z biblioteką ncurses i skakaniem w odpowiednie miejsca kursorem. Albo po prostu zwykłe gotoxy, na necie poszukaj implementacji.

Opublikowano

ewentualnie pokombinuj z dynamicznym odświeżaniem konsoli i funkcją _sleep(int chyba :D czyli czas w ms) (jest to funkcja biblioteki conio2.h);

Albo z instrukcjami skoku goto :D

jak coś pojebałem to przepraszam ale mam kaca morderce :D

Opublikowano

Dasz rade chopie :D

Pamietaj że (prawie) wszystko jest obiektem :D

Zainteresuj sie kursem Xiona (od zera do gier kodera)

buch z wami.

Opublikowano

nie polecam conio bo nie jest w standardzie

nie polecam kursu xiona bo jest dosyć stary i są lepsze

_sleep jest też w windows.h jako Sleep, ale ta funkcja ma się nijak do tego problemu

Opublikowano

Powinno dzialac bynajmniej mi dzialalo jak kiedys pisalem gre w konsoli

 

#include <iostream>
#include <windows.h>
using namespace std;

void gotoxy(int x, int y)
{
	COORD pos = {x ,y};
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}

int main() 
{		

    cout<<"============================="<<endl;
    cout<<"=                           ="<<endl;
    cout<<"=     LOGIN:                ="<<endl;
    cout<<"=     HASLO:                ="<<endl;
    cout<<"=                           ="<<endl;
    cout<<"============================="<<endl;
    
	gotoxy(13,2);	//kursor ustawia sie za loginem
	gotoxy(13,3);	//tutaj za haslem

	
	return 0;
}
Opublikowano

Powinno dzialac bynajmniej mi dzialalo jak kiedys pisalem gre w konsoli

 

#include <iostream>
#include <windows.h>
using namespace std;

void gotoxy(int x, int y)
{
	COORD pos = {x ,y};
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}

int main() 
{		
    system("cls");
    cout<<"============================="<<endl;
    cout<<"=                           ="<<endl;
    cout<<"=     LOGIN:                ="<<endl;
    cout<<"=     HASLO:                ="<<endl;
    cout<<"=                           ="<<endl;
    cout<<"============================="<<endl;
    
	gotoxy(13,2);	//kursor ustawia sie za loginem
	gotoxy(13,3);	//tutaj za haslem

	
	return 0;
}

 

 

Teraz zadziała w większości przypadków.

Nie pomagam na PW, od tego macie forum!!!

 

#PHP-things

 

 

08FMpDu.png

 

Opublikowano
Opublikowano

Czytalby znak i wyswietliby go odrazu jako gwiazdke.

 

 

 

 

Zdecydowanie odradzam. cin.get to dużo lepszy odpowiednik.

 

A dlaczego ma byc niby gorszy ?

 

 

 

 

@ Takie cos se napisalem xD

 



#include <iostream>
#include <windows.h>
#include <conio.h>
#include <stdio.h>

using namespace std;

void gotoxy(int x, int y)
{
	COORD pos = {x ,y};
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void textcolor(short x)
{
	HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hConsole,x);
}

int main() 
{		

char znak;
string haslo;
string login;
int prob=0;

do
{
	 system("cls");
   	 textcolor(15);
   	 
	cout<<"\n   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»";
	cout<<"\n   ş           LOGOWANIE           ş"; 
   	cout<<"\n   ĚÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍą"; 
   	cout<<"\n   ş   Login :                     ş"; 
  	cout<<"\n   ĚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄą"; 
   	cout<<"\n   ş   Haslo :                     ş"; 
   	cout<<"\n   ČÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍĽ";
   		
fflush(stdin);
login.clear();
haslo.clear();
			
	gotoxy(16,4);
while((znak = getch())!=13)
	{
	if((znak==8)&&(!login.empty()))
		{
		login.erase(login.length() - 1);
		
		gotoxy(16+(login.length()),4);
			cout<<" ";
		gotoxy(16+(login.length()),4);
		} 
	if((znak!=8)&&(login.length()<=15))
	  	{
		login.append(1, znak);
			cout<<znak;   
		}		
	}
		
	gotoxy(16,6);
while((znak = getch())!=13)
	{
	if((znak==8)&&(!haslo.empty()))
		{
		haslo.erase(haslo.length() - 1);
		
		gotoxy(16+(haslo.length()),6);
			cout<<" ";
		gotoxy(16+(haslo.length()),6);
		} 
	if((znak!=8)&&(haslo.length()<=15))
	  	{
		haslo.append(1, znak);
			cout << "*";   
		}		
	}
		
if ((login=="admin")&&(haslo=="admin1"))
   	{
   	textcolor(0x0a);
	gotoxy(3,9);		cout<<"ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄż\n";
	gotoxy(3,10);		cout<<"ł        WITAJ W SYSTEMIE       ł\n";
	gotoxy(3,11);		cout<<"ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ\n";
	textcolor(15);
        break;
   	}
	else
   	{
	textcolor(0x0c);
	gotoxy(3,9);		cout<<"ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄż\n";
	gotoxy(3,10);		cout<<"ł    Bledny login badz haslo    ł\n";
	gotoxy(3,11);		cout<<"ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ\n";
	gotoxy(3,15);	
	textcolor(15);
	system("pause");
	}        
	
	prob++;      
}while(prob<3);
		
	return 0;
}


Opublikowano

Masz racje ,ale wydaje mi sie ,ze nie ma w standardzie zadnej biblioteki do obslugi klawiatury , a chcac napisac cos fajnego trzeba czasami wyjsc poza standard ;p

To lepiej użyć windows.h (WinAPI), czy jakichś przenośnych bibliotek do obsługi konsoli jak ncurses, niż biblioteki starej jak DOS
Opublikowano

Czytalby znak i wyswietliby go odrazu jako gwiazdke.

 

 

 

 

 

 

A dlaczego ma byc niby gorszy ?

 

 

 

 

@ Takie cos se napisalem xD

 



#include <iostream>
#include <windows.h>
#include <conio.h>
#include <stdio.h>

using namespace std;

void gotoxy(int x, int y)
{
	COORD pos = {x ,y};
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void textcolor(short x)
{
	HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hConsole,x);
}

int main() 
{		

char znak;
string haslo;
string login;
int prob=0;

do
{
	 system("cls");
   	 textcolor(15);
   	 
	cout<<"\n   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»";
	cout<<"\n   ş           LOGOWANIE           ş"; 
   	cout<<"\n   ĚÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍą"; 
   	cout<<"\n   ş   Login :                     ş"; 
  	cout<<"\n   ĚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄą"; 
   	cout<<"\n   ş   Haslo :                     ş"; 
   	cout<<"\n   ČÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍĽ";
   		
fflush(stdin);
login.clear();
haslo.clear();
			
	gotoxy(16,4);
while((znak = getch())!=13)
	{
	if((znak==8)&&(!login.empty()))
		{
		login.erase(login.length() - 1);
		
		gotoxy(16+(login.length()),4);
			cout<<" ";
		gotoxy(16+(login.length()),4);
		} 
	if((znak!=8)&&(login.length()<=15))
	  	{
		login.append(1, znak);
			cout<<znak;   
		}		
	}
		
	gotoxy(16,6);
while((znak = getch())!=13)
	{
	if((znak==8)&&(!haslo.empty()))
		{
		haslo.erase(haslo.length() - 1);
		
		gotoxy(16+(haslo.length()),6);
			cout<<" ";
		gotoxy(16+(haslo.length()),6);
		} 
	if((znak!=8)&&(haslo.length()<=15))
	  	{
		haslo.append(1, znak);
			cout << "*";   
		}		
	}
		
if ((login=="admin")&&(haslo=="admin1"))
   	{
   	textcolor(0x0a);
	gotoxy(3,9);		cout<<"ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄż\n";
	gotoxy(3,10);		cout<<"ł        WITAJ W SYSTEMIE       ł\n";
	gotoxy(3,11);		cout<<"ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ\n";
	textcolor(15);
        break;
   	}
	else
   	{
	textcolor(0x0c);
	gotoxy(3,9);		cout<<"ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄż\n";
	gotoxy(3,10);		cout<<"ł    Bledny login badz haslo    ł\n";
	gotoxy(3,11);		cout<<"ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ\n";
	gotoxy(3,15);	
	textcolor(15);
	system("pause");
	}        
	
	prob++;      
}while(prob<3);
		
	return 0;
}


a mógłbyś jeszcze opisać mniej więcej ten kod, bo pięknie działa, tylko już z ogarnięciem mam trochę większy problem :P .

Opublikowano

Chyba rozkminisz o co biega ^^




#include <iostream>
#include <windows.h>
#include <conio.h>
#include <stdio.h>

using namespace std;

void gotoxy(int x, int y)
{
	COORD pos = {x ,y};
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}

void textcolor(short x)//taka funkcja do kolorowania  
{
	HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hConsole,x);
}

int main() 
{		
//zmiennych chyba nie trzeba opisywac ;]
char znak;
string haslo;
string login;
int prob=0;

do//petla ktora bedzie wykonywana dopoki nie zuzyjemy wszystkich prob a mamy 3 ;]
{
	
	 system("cls");//czyszczenie ekranu 
   	 textcolor(15);//ustawienie koloru bialego
   	 
	cout<<"\n   ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»";//takie tam ramki i napisy
	cout<<"\n   ş           LOGOWANIE           ş"; 
   	cout<<"\n   ĚÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍą"; 
   	cout<<"\n   ş   Login :                     ş"; 
  	cout<<"\n   ĚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄą"; 
   	cout<<"\n   ş   Haslo :                     ş"; 
   	cout<<"\n   ČÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍĽ";
   		
fflush(stdin);//czysczenie buforu klawiatury
login.clear();//Usuwanie zawartosci lancucha, przez co staje si on pusty ;p 
haslo.clear();//tutaj to samo 
			
	gotoxy(16,4);//ustawienie kursora za napisem login :
		
while((znak = getch())!=13)//getch() przypisuje do zmiennej znam "klawisz" jaki zostal nacisniety , tak sie robi caly czas dopoki nie bedzie to enter
	{
	if((znak==8)&&(!login.empty()))//sprawdza czy znak to backspace i czy lancuch nie jest pusty , bo po co kasowac jak nic w nim nie ma ;]
		{//jezeli warunek sie spelni to
		login.erase(login.length() - 1);//usuwa czesc lancucha zmienszona o dlugosc w tym wypadku o 1 
		
		gotoxy(16+(login.length()),4);//ustawia sie kursor za loginem + dlugosc lancucha 
			cout<<" ";//czysci pole
		gotoxy(16+(login.length()),4);//ustawia sie ponownie w to samo miejsce
		} 
	if((znak!=8)&&(login.length()<=15))//sprawdza czy znak jest inny niz backspace i czy lancuch nie jest dluzszy badz rowny niz 15 znakow
	  	{//jezeli warunek sie spelni to
		login.append(1, znak);//rozszerza lancuch o podany znak
			cout<<znak;  //wyswietla ten znak 
		}	
	}
		
	gotoxy(16,6);gotoxy(16,4);//ustawienie kursora za napisem haslo : tutaj powtarza sie to samo co wyzej
	
while((znak = getch())!=13)
	{
	if((znak==8)&&(!haslo.empty()))
		{
		haslo.erase(haslo.length() - 1);
		
		gotoxy(16+(haslo.length()),6);
			cout<<" ";
		gotoxy(16+(haslo.length()),6);
		} 
	if((znak!=8)&&(haslo.length()<=15))
	  	{
		haslo.append(1, znak);
			cout << "*";  //wyswietla gwiazdke zamiast hasla 
		}		
	}
		
if ((login=="admin")&&(haslo=="admin1"))//sprawdza czy login i haslo sa zgodne z tym co ustalimy sobie 
   	{//jezeli tak to
   	textcolor(0x0a);//zmienia kolor tla na czarny a napis na zielony , oczywiscie w tym co bedzie wyswietlone
	gotoxy(3,9);		cout<<"ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄż\n";//tutaj takie ramki itp.
	gotoxy(3,10);		cout<<"ł        WITAJ W SYSTEMIE       ł\n";
	gotoxy(3,11);		cout<<"ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ\n";
	textcolor(15);//zmienia kolor napisu na bialy
        break;//pomija petle i konczy sie program
   	}
	else//jezeli nie sa poprawne dane to
   	{
	textcolor(0x0c);//zmienia kolor tla na czarny a napis na czerwony 
	gotoxy(3,9);		cout<<"ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄż\n";
	gotoxy(3,10);		cout<<"ł    Bledny login badz haslo    ł\n";
	gotoxy(3,11);		cout<<"ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ\n";
	gotoxy(3,15);	
	textcolor(15);//napis bialy
	system("pause");//czeka na nacisniecie dowolnego klawisza
	}        
	
	prob++; //jezeli nie wpisano poprawnie danych to zwieksza sie ilosc prob , czyli defakto sie zmniejsza ;]
	//1raz 3-1=2
	//2raz 3-2=1
	//3raz to juz bedzie ostatni raz ;]
	
}while(prob<3);//proby liczmy w ten sposob 0,1,2 < 3 
		
	return 0;
}

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...