WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   C/C ++ Programm (http://www.wcm.at/forum/showthread.php?t=46712)

coolbininet 17.02.2002 16:26

C/C ++ Programm
 
@All - Ein Programmieranfänger ist verwirrt aber glücklich!

Hi Leute, schauts Euch mal den (Teil)Source an:

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


int main ()
{
char c;
bool weiter = true;

clrscr();
while( weiter )
{
gotoxy (20,2);
printf ("1.) Addieren");
gotoxy (20,4);
printf ("2.) Subtrahieren");
gotoxy (20,6);
printf ("3.) Multiplizieren");
gotoxy (20,8);
printf ("4.) Dividieren");
while( !kbhit() )
{

}
c = getch();
weiter = !((c == '1') || (c == '1') || (c == '2')|| (c == '2') || (c == '3') || (c == '3') || (c == '4') || (c == '4'));
}
clrscr();
return 0;
}

Ist es normal, dass unter DOS dort ein Mousecursor angezeigt wird (mit Code von oben), den man bewegen kann? Dann ist es doch dort anscheinend auch möglich den Mousecursor dort mit Funktionen auszustatten, das wenn man auf zB Multiplizieren drückt dort eine Funktion aufgerufen wird oder geht dies schon zu sehr in die objektorientierte über?

Bitte helft mir weiter ich brauche Antworten für die Schule!

Mit freundlichen Grüßen

Coolbininet

it00x30 17.02.2002 17:02

wenn du mit dem mauscursor explizit arbeiten willst musst du mit grafikprogrammierung beginnen

mit deinem programm hat es sicher nichts zu tun, dass hier eine maus zu sehen ist.

verlass dich auf die tastatur um diene programme zu steuern, das erspart dir die MFC's die allerdings für einen anfänger (speziell im bereich objectorientierung) sicher sehr verwirrend sind - aber übung macht den meister ...

eine frage hab ich noch, warum fragst du jedes zeichen 2x ab? (in der while-schleife)

coolbininet 17.02.2002 18:41

Antwort
 
@it00x30

Hat eigentlich nur den tieferen Sinn, da ich das Programm von einem Bekannnten habe und das a bisserl umänderte (vorher wurden klein und Großbuchstaben abgerufen) und somit ich nicht so viel Arbeit hatte (Löscharbeit hatte) habe ich einfach nur die Buchstaben ersetzt.

Mit freundlichen Grüßen

Coolbininet

P.S.: kann ich bei dieser Vorgehensweise auch ohne eine Fallunterscheidung (Case-Anweisung, zB mit goto-sprungmarken) den Programmablauf verändern? In die Art, dass ich mit der Sprungmarke nach dem ich zB die Eins Abgefragt habe zur Sprungmarke L80 ein Beispiel gerechnet wird zum Addieren?

Sonic 17.02.2002 19:14

Re: Antwort
 
Zitat:

Original geschrieben von COOLBININET


P.S.: kann ich bei dieser Vorgehensweise auch ohne eine Fallunterscheidung (Case-Anweisung, zB mit goto-sprungmarken) den Programmablauf verändern? In die Art, dass ich mit der Sprungmarke nach dem ich zB die Eins Abgefragt habe zur Sprungmarke L80 ein Beispiel gerechnet wird zum Addieren?

aaahhh! Bitte kein Goto in C! ;)
Gewöhn dir erst garnicht an in Spagetticode (so nennt man code mit Gotos und sprungmarken) zu programmieren. Man kann alles ganz schön mit case, if, und prozeduren lösen. Und jeder halbwegs gute programmierer wird dir abraten gotos zu verwenden.

ps: möglich währe es....

lg

pong 17.02.2002 19:41

@COOLBININET wennst in c/c++ mit sprungmarkn arbeiten willst, dann verzieh dich bitte ins emedia forum, danke :D

DerBRM 17.02.2002 19:48

Kann ebenfalls nur von GoTo-Anweisungen abraten. Programmiere am Großrechner und PC und vermeide immer solche Sprunglabels, da oft dadurch falsche Zuweisungen oder Variableninhalte auftreten

Tubetraxxx-rOOm4- 19.02.2002 11:03

also,
um die maus zu verwenden muss man nicht umbeding grafik programmieren! hab auch schon einige programme geschrieben ohne grafikprogrammierung.
ich werde heut noch in meinen unterlagen kramen und den code für die mausansteuerung posten!


GOTO's in C?! oh mein gott, bitte nicht! das is das schlechteste was man machen kann! wenn du sagst du brauchst es für die schule wird der lehrer sehr unglücklich sein damit!


bis später dann,
mfg, patrick!

it00x30 19.02.2002 12:32

du meinst man kann mit der maus menüs führen, ohne ein fixes fenster zu haben. wie soll das gehen in der konsole, da weiss man ja nie wo im konsolenfenster man steht (scroll, ...)

aber ich lasse mich gern eines besseren belehren

coolbininet 19.02.2002 13:00

Festellung
 
@Tubetraxxx-rOOm4

Hi, wollte dich nur fragen, obst schon den Code posten kannst?

Mit freundlichen Grüßen

Coolbininet

gaelic 19.02.2002 13:05

aber das gotoxy(x,y) im code und goto haben gar nichts miteinander zu tun.

Tubetraxxx-rOOm4- 19.02.2002 19:11

eh nicht!
goto is ne sprungmarke und gotoxy(x,y) ist zum positionieren des cursors am bildschirm um so das bildschirmlayout besser zu gestalten können!


mfg, tubetraxxx...

Tubetraxxx-rOOm4- 20.02.2002 23:04

das is mal der code für die diversen mausfunktionen....
is halt die maussteuerung im textmodus...der cursor ist im prinzip ein BLOCK (so wie _setcursortype(_SOLID); )
bei diversen fragen fragt einfach ganz ungeniert...;))


union REGS outregs; //global für Testauswertung wird benötigt!

void posmaus(int x, int y)
{
REGS reg;

reg.x.ax=4;
reg.x.cx=x*8-1;
reg.x.dx=y*8-1;
int86(0x33,&reg,&reg);
}

int mousecheck() //schaut ob maus existiert und #der tasten
{
union REGS inregs;
inregs.x.ax = 0;
int86(0x33,&inregs,&outregs);
return(outregs.x.ax ? outregs.x.bx : 0);
}

void mousecursor(int toggle) //schaltet mauscursor ein/aus
{
union REGS inregs;
if(toggle) inregs.x.ax = 1;
else inregs.x.ax = 2;
int86(0x33,&inregs,&outregs);
}

int mouserow() //gibt die zeile in der sich die maus
{ //befindet zurück
union REGS inregs;
inregs.x.ax = 3;
int86(0x33,&inregs,&outregs);
return(outregs.x.dx/8+1);
}

int mousecol() //gibt die spalte in der sich die maus
{ //befindet zurück
union REGS inregs;
inregs.x.ax = 3;
int86(0x33,&inregs,&outregs);
return(outregs.x.cx/8+1);
}

int mousebuttons() //schaut ob eine maustaste gedrückt
{ //ist
union REGS inregs;
inregs.x.ax=6;
int86(0x33,&inregs,&outregs);
return(outregs.x.ax & 3);
}

int mouseclick() //schaut ob maustasten gedrückt wurden
{
int click =0;
union REGS inregs;
inregs.x.ax = 5;
inregs.x.bx = 1;
int86(0x33,&inregs,&outregs);
click = outregs.x.ax << 1;
int86(0x33,&inregs,&outregs);
return(click | outregs.x.ax);
}

void mousestat(unsigned int *button, unsigned int *col, unsigned int *row)
{
union REGS inregs,outregs; //Gibt die aktuelle Position und
struct SREGS segregs; //den Tastenstatus zurück
inregs.x.ax=0x33;
int86x(0x33,&inregs,&outregs,&segregs);
*button=outregs.x.bx;
*col=outregs.x.cx;
*row=outregs.x.dx;
}

void mousetcur(char zeichen)
{
union REGS inregs,outregs; //Funktion um die art
struct SREGS segregs; //des mauscorsors zu ändern
inregs.x.ax=0x000A; //Möglich sind alle ASCII-
inregs.x.bx=0x0000; //Zeichen
inregs.x.cx=0x7700;
inregs.x.dx=0x7700;
inregs.x.dx |= zeichen;
int86x(0x33,&inregs,&outregs,&segregs);
}

void mouseget(unsigned *button, unsigned *col,unsigned *row,unsigned *keystat)
{
unsigned hbut,hcol,hrow; //hilfsvariablen
char taste;

*keystat=0;
mousestat(&hbut,col,row); //checkt den mausstatus
//einmal vorerst und dann
while(!hbut && !kbhit()) //so lange keine taste gedrückt
{ //wird-->
mousestat(&hbut,col,row); //checkt den mausstatus
}
*button=hbut; //merke gedrückte taste
while(hbut) //und warte bis die taste
{ //losgelassen wurde
mousestat(&hbut,&hcol,&hrow);
}
if(kbhit()) //wenn eine taste gedrückt
{ //(tastatur)
taste=getch(); //merke taste
*keystat |= 0x0100; //und setze flag
if(kbhit()) //check ob weitere taste
{
taste=getch();
*keystat |= 0x0200; //wenn gedrückt
*keystat |= taste; //return taste (neu)...
}
else
*keystat |= taste; //sonst alte...
}
}

sodala....bei diversen fragen steh ich gern zu verfügung...

mfg, patrick...

Tubetraxxx-rOOm4- 20.02.2002 23:29

Zitat:

Original geschrieben von it00x30
du meinst man kann mit der maus menüs führen, ohne ein fixes fenster zu haben. wie soll das gehen in der konsole, da weiss man ja nie wo im konsolenfenster man steht (scroll, ...)
klar ist das man grad mal die bildschirmausmaße hat, also 80 spalten und 25 zeilen im normalen textmodus....den man aber erweitern kann auf 80x50...
aber scroolen lässt sich sicherlich programmieren, is eigentlich nicht so tragisch...
mfg, patrick...

gaelic 21.02.2002 09:40

einfach mal den alten dos-editor starten und schon hat man ein anschauungsbeispiel. :p

Tubetraxxx-rOOm4- 21.02.2002 23:01

jop, hast recht....im dos einfach den edit...dort is ja auch scrolling eingebaut logischwer weise!
oder auch im borland c....kannst ja auch scrollen...;)

batigol1860 21.02.2002 23:08

An alle, die gotoxy für einen Sprungbefehl halten:

SCHÄMEN UND 1 STUNDE IN DIE ECKE STELLEN!!!

Eigentlich untypisch fürs WCM-Forum, so dass unqualifizierte Kommentare abgegeben werden. Redets lieber von etwas, wo Ihr euch auskennt.

:heul: :heul:

Sonic 21.02.2002 23:37

Zitat:

Original geschrieben von batigol1860
An alle, die gotoxy für einen Sprungbefehl halten:

SCHÄMEN UND 1 STUNDE IN DIE ECKE STELLEN!!!

Eigentlich untypisch fürs WCM-Forum, so dass unqualifizierte Kommentare abgegeben werden. Redets lieber von etwas, wo Ihr euch auskennt.

:heul: :heul:

Du solltest dich schämen!!
Oder das nächstemal genauer lesen bevor du deinen Kommentar postest. ;)

Hinweis: Lies doch mal das PS vom 2. Posting von COOLBININET!

lg

batigol1860 22.02.2002 10:09

Hi,

na gut, sorry - hab ich wirklich nicht gesehen.

*SCHÄM* (aber nur kurz)


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag