Jak odpowiednio użyć getch() w tym programie

0

Witam serdecznie, chciałby aby program automatycznie sprawdzał mi czy podany numer jest prawidłowy bez wciskania enteru automatycznie

Z gory dziekuje ;)


include <iostream>
include <string>
include <conio.h>
include <cstdlib>
include <windows.h>
include <stdio.h>


iint main()
	{
		int dobre=0;
    	int zle=0;
    	int ilosc;
    	std::string tym;
    	int i;
    	std::string numer;
    	HANDLE hOut;
		using namespace std;
		cout << "Teilenummer: " << endl;
		cin >> numer;
		cout << "Anzahl der Teile zu scannen: " << endl;
		cin >> ilosc;
		for (i=0; i<ilosc; i++)
			{
				hOut = GetStdHandle( STD_OUTPUT_HANDLE );
				SetConsoleTextAttribute( hOut, BACKGROUND_INTENSITY );
				cout << "Scan:";
				cin >> tym;
				if (numer==tym) 
					{
						hOut = GetStdHandle( STD_OUTPUT_HANDLE );
						SetConsoleTextAttribute( hOut, BACKGROUND_GREEN );
						cout << "OK!" << endl;
						dobre++;
					} else {
						hOut = GetStdHandle( STD_OUTPUT_HANDLE );
						SetConsoleTextAttribute( hOut, BACKGROUND_RED );
						cout << "Schlecht!!!" << endl;
						zle++;
					}
			}
			if (dobre>=0)
			{
				hOut = GetStdHandle( STD_OUTPUT_HANDLE );
				SetConsoleTextAttribute( hOut, BACKGROUND_GREEN );
				cout << "Anzahl der guten teile: " << dobre << " \n";
			} 
			if (zle>=0)
			{
				hOut = GetStdHandle( STD_OUTPUT_HANDLE );
				SetConsoleTextAttribute( hOut, BACKGROUND_RED );
				cout << "Anzahl der fehlerhaften Teile: " << zle << " \n";
			}
			hOut = GetStdHandle( STD_OUTPUT_HANDLE );
			SetConsoleTextAttribute( hOut, BACKGROUND_INTENSITY );
			cout << "Zusammen: " << i;
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0);
		return(0);
	}

0

Tego się nie da czytać. Wrzuć w odpowiednie znaczniki <code class="cpp"></code>

0

POPRAWIONE :)

0

Teraz to nie rozumiem tego

bez wciskania enteru automatycznie
i co z tym wszystkim ma wspólnego getch()? Sprecyzuj o co Ci chodzi :)

0

no ze jak wprowadze ciag znakow, to zeby od razu mowilo czy jest to OK czy złe, bez wciskania enter :p

0

Jak wprowadzisz cały czy podczas wprowadzania cyfra po cyfrze?

Możesz zrobić sobie jakiś bufor i po wczytaniu każdego znaku sprawdzać poprawność całości. W pętli jakiejś pobieraj kolejne znaki

0

calosc bedzie podawana od razu tak jakbys wkleil ciag tekstu, wiec nie trzeba, wazne aby od razu mowilo czy dobre albo zle .

0

O to chodzi?

#include <conio.h>
#include <cctype>
#include <iomanip>
#include <iostream>
using namespace std;

int getKey()
  {
   int value=getch();
   return value?value:((int)getch())<<8;
  }

int getUnsigned(unsigned *Value)
  {
   int ch;
   unsigned tmp,value=*Value;
   cout<<value;
   while(true)
     {
      ch=getKey();
      if(ch=='\b')
        {
         if(value)
           {
            value/=10;
            if(value) cout<<"\b \b";
            else cout<<"\b0";
           }
        }
      else if(isdigit(ch))
        {
         tmp=value*10+ch-'0';
         if(tmp%10==(unsigned)(ch-'0'))
           {
            if(value) cout<<(char)ch;
            else cout<<'\b'<<(char)ch;
            value=tmp;
           }
        }
      else if((ch=='\n')||(ch=='\r'))
        {
         *Value=value;
         break;
        }
      else if(ch==27) break;
     }
   return ch;
  }

int main()
  {
   unsigned value=0;
   cout<<"Podaj liczbe: ";
   int ch=getUnsigned(&value);
   cout<<" <= Podano "<<value<<" Zatwierdzono znakiem 0x"<<hex<<ch<<endl;
   return 0;
  }
0

Pod windowsem możesz użyć conio.h (stara biblioteka msdos) getch(), albo getche(). Pod Linuxem powinno się to dać zrobić przy pomocy ncurses. Najsprytniej będzie napisać funkcje:

#ifdef WIN32
#include "conio.h"
#else
#include "ncurses.h"
#endif


char get_char()
{
    #ifdef WIN32
    getche();
    #else
    initscr();
   timeout(-1);
   int c = getch();
   endwin();
   #endif
}
0

_13th_Dragon:

Nie do konca, skaner ma podac ciag znakow za 1 razem do programu tak jakbys uzyl kopiowania i wklejenia kilku znakow naraz. i Z miejsca powinno wyswietlic czy kod zgaza sie z tym co wpisales wczesniej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1