Frage
-
die hab ich auch in meinem buch stehen abba ich meine dann fuer esc odder gibt es da noch eine andere moeglichkeit wenn mann z.B.
while ((c = getchar()) !='\n')
printf("%c", c)so machen kann das das programm nur mit der eingabe taste beenden kann
dies auch mit Esc
mfg
BelborraS
-
hi
escape ist die 27.. an dieser stelle wäre es auch interessant, in die konsole zu gehen und die conio.h (so sie im compilerinclude vorhanden) zu nutzen, bzw. die dort existierende funktion getch();
ansonsten so:
int ein;
while (true){ein=getchar();
if(ein==27)
break;
else
continue;}
-
ich hab das jetzte aber anders geloest
int c;
while ((c = getch()) !=27 )
printf("%i", c);gibt jetzt zurzeit immer die asci fuer die entsprechenen zahlen und laesst sich mit esc beenden
allerdings hab ich jetzt ne ander frage und zwar wie komm ich ueber zeiger in den video ram (unter DOS) im text mode 3
mfg
BelborraS
-
und da du jetzt schon ein abtrünniger bist und getch verwendest (was kein c++ standard ist
) und dazu noch in den video ram und dazu noch unter dos 16 bit willst, würde ich dir raten, die frage im konsolenfaq zu stellen
-
wie kann man denn in der faq fragen stellen?
-
/edit
falsch gelesen und mich verschriebenmein djgpp compiler kann übrigens dieses hier..
#include <conio.h> void textmode(int _mode); Description Sets the text mode of the screen. _mode is one of the following: LASTMODE The text mode which was in effect before the last call to textmode(). BW40 40-column black and white (on a color screen) C40 40-color color. BW80 80-column black and white (on a color screen) C80 80-column color MONO The monochrome monitor C4350 80-column, 43- (on EGAs) or 50-row (on VGAs) color See section _set_screen_lines, for a more versatile method of setting text screen dimensions. Portability not ANSI, not POSIX
was hast du für einen compiler? sowas kann wohl nur noch der borland.. sonst.
-
Thrend verschoben ins Konsolen Forum.
-
ich hab den Borland
allerdings muss ich bis morjen zeiger und bitmanipulation koennen
und deswegen wollte ich wissen wie mann mit hilfe von zeigern auf den videoramm
kommt
BelborraS
-
Hmm das geht wirklich nur unter 16bit-Programmen (Achtung: Die Win32-Konsole unterstützt dies nicht mehr).
Also wenn du ein echtes DOS hast kannst du mit int86() Interrupts aufrufen - hier ist der Interrupt 10h beschrieben: http://www.datasource.de/programmierung/tab08_biosint10h.htm
Ich glaube der ist zuständig für den VideoRAM.
MfG SideWinder
-
hmmm wir hatten das mal inna schule und da ham wir irgentwie mit zeigern auf den videoram vom text mode 3 welcher inna adresse b8000 + die naechsten 4000 byte sitzen soll.
mfg
BelborraS
P.s. und wie kann ich direkt eine adresse mit einem zeiger ansprechen ....
-
Also wenn du direkt Speicheradressen ansprechen willst, dann brauchst du dazu outp() und inp(). Aber Vorsicht! Du kannst damit auch ganz schönen Mist anstellen. Wie man die Funktionen benutzt kannst du dir mal in der FAQ ansehen unter COM-Ports ansteuern unter DOS (16 Bit). Hat zwar nichts mit dem Bildschirm zu tun, aber vielleicht hilfts ja. Obwohl ich trotzdem davon abraten würde, um es nochmal zu betonen, besonders als Einsteiger.
Wenn du was mit Zeiger machen willst, dann spiel dich lieber mit Strings (Char-Vektoren) rum (z. B. bestimmte Stringfunktionen nachprogrammieren mithilfe von Zeigern). Wenn du was grafisches machen willst, dann benutz am besten eine Grafikbibliothek (unter Borland evtl. graphics.h oder allgemein vielleicht allegro).
-
also ich hab jetzte noch mal meinen tutor gefragt und wir hatten
//Datei: fenster1.cpp //Demonstration des Ansprechens des DOS-Textbildspeichers #include <stdio.h> //fr getchar #include <conio.h> //fr clrscr #include <iostream.h> //fr _fmemcpy void main() { const char ende[4]="ende"; char z; long kopie[1000]; void far *lptr; lptr = (void far *) ((long) (0xb800)<<16|0x0000); // lptr = (void far *) ((long) (0xb8000000); clrscr(); textmode(3); //Eingeben von Text, Abschluss mit ESC do { z=getche(); if (z==13) cprintf("\n"); } while (z!=27); //Sichern des bisherigen Bildschirminhaltes _fmemcpy(kopie,lptr,sizeof(kopie)); //Einschr„nken des Eingabebereiches auf ein kleines Fenster window(3,3,10,10); textbackground(7); textcolor(0); clrscr(); //Eingeben von Text, Abschluss mit ESC do { z=getche(); if (z==13) cprintf("\n"); } while (z!=27); //Eingabebereich = ganzer Bildschirm window(1,1,80,25); textbackground(0); textcolor(15); clrscr(); //Wiederherestellen des ursprnglichen Bildschirminhaltes _fmemcpy(lptr,kopie,sizeof(kopie)); getchar(); }
mfg
BelborraS
-
Aha du speicherst also den Bildschirminhalt und gibst ihn danach wieder aus. Das funktioniert sicher unter DOS, aber bei neueren Betriebssystemen wirst du da Schwierigkeiten haben. Die geben dir nämlich nicht so einfach den Zugriff auf irgendwelchen Speicher frei.