einfacher Editor [Anfänger]

Kroato

Grünschnabel
Hallo ich habe vor ein paar Wochen das en angefangen, benutze DEV C++.
Ich soll einen sogenannten "ein zeilen editor" schreiben, mit dem man also zb max 40 zeichen schreiben kann, diese aber löschen kann. Also ein Editor eben,,,

zusätzlich soll er Pieps machen, wenn ich den Rand vom textfeld erreiche, was sozusagen ein warnsignal ist, dass es dort nicht weitergeht...

Hab schon ein wenig gemacht aber kann einfach nicht mehr, bin krank und ein wenig verzweifelt... es muss nicht so wie meins aufgebaut sein, nur funktionieren :)
Dann könnte ich mich die Vorgänge und Codes wenigstens einprägen...
Bitte um HIlfe! Hier der Code bis jetzt, kann aber auch anders gemacht sein, Hauptsache es geht...

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include "1_zeilen_edit.h"


#define backspace 0x08
#define linefeed 0x0A
#define CR 0x0D
#define espace 0x1B
#define Piep 0x07


int main(int argc, char *argv[])
{
int i;
int posx =0;
int posy=0;
char cEingabe;
char cOut_Array[40] = {0};
char *ptr_cOut_Array;
ptr_cOut_Array = cOut_Array;

cOut_Array[37] = '>';
cOut_Array[38] = '>';
cOut_Array[39] = '>';
gotoxy(posx,posy);

//#########Programmanfang##########


while(cEingabe != 0x0D)
{

cEingabe = getch();

switch(cEingabe)
{
case CR: //Backspace

break;

default:


if ((cEingabe >= 0x41 && cEingabe <= 0x5A) || //zwischen 0x49 und 0x5A liegen Grosbuchstaben
(cEingabe >= 0x61 && cEingabe <= 0x7A) || //zwischen 0x61 und 0x7a liegen Kleinbuchstaben
(cEingabe >= 0x30 && cEingabe <= 0x39)) //zwischen 0x30 und 0x39 liegen dieZahlen 0-9
{
putch(cEingabe);
*ptr_cOut_Array = cEingabe;
*ptr_cOut_Array++;
posx++;
gotoxy(posx,posy);
}
else putch(Piep);
break;

}


}

system("PAUSE");
 
Also ich komm immernoch nicht klar.
Echt?! Und nach geschlagenen 42 Minuten hat immer noch niemand auf deinen Beitrag geantwortet und dein Programm fertig gemacht? :rolleyes:

  1. Thread Pushing wird gar nicht gern gesehen. Das hier ist kein Chat-Room oder Supportdienst.
  2. Benutze die entsprechenden Code-Tags für Codeschnipsel. Das erhöht die Chance das sich jemand deinen Code anschaut ungemein. Wenn du nicht weißt was Code-Tags sind, dann solltest du dich erstmal mit dem Forum hier vertraut machen.

Gruß
 
Entschuldige bitte.
Ich fange am Besten nochmal an, es geht darum einen kleinen String zu basteln der links und rechts vom eigentlichen "Schriftfeld" begrenzt ist und dies durch ein piepsen deutlich gemacht wird. Man soll den Cursor links und rechts bewegen können aber eben nicht über die "Absperrung". Ich hab bissle was gemacht aber komm ums verrecken nicht weiter und würde mich wirklich wirklich freuen wenn mir jemand weiterhelfen könnte.

Hier ist der Code den ich bis jetzt habe.


Code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//#include <windows.h>
//#include "1_zeilen_edit.h"

#define backspace 0x08
#define linefeed 0x0A
#define CR 0x0D
#define espace 0x1B
#define Piep 0x07

void gotoxy(short x, short y)
{
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X=x-1;
pos.Y=y-1;
SetConsoleCursorPosition(hCon, pos);
}


int main(int argc, char *argv[])
{
    int i;
    int posx =0;
    int posy=0;
    char cEingabe;
    char cOut_Array[40] = {0};
    char *ptr_cOut_Array;
    ptr_cOut_Array = cOut_Array;
    
    cOut_Array[37] = '>';
    cOut_Array[38] = '>';
    cOut_Array[39] = '>';
    gotoxy(posx,posy);
  
  //#########Programmanfang##########
  
  
  while(cEingabe != 0x0D)
  {
    
        cEingabe = getch();        

        switch(cEingabe)
           {
              case CR:           //Backspace               
              
              break;
           
              default:
        
                     
              if      ((cEingabe >= 0x41 && cEingabe <= 0x5A) ||         //zwischen 0x49 und 0x5A liegen Grosbuchstaben
                       (cEingabe >= 0x61 && cEingabe <= 0x7A) ||         //zwischen 0x61 und 0x7a liegen Kleinbuchstaben
                       (cEingabe >= 0x30 && cEingabe <= 0x39))           //zwischen 0x30 und 0x39 liegen dieZahlen 0-9
              {
                  putch(cEingabe);
                  *ptr_cOut_Array = cEingabe;
                  *ptr_cOut_Array++;
                  posx++;
                  gotoxy(posx,posy);
              }
             else putch(Piep);
             break;
            
          }
  
  
  }  
    
  system("PAUSE");	
  return 0;
}
 
Zuletzt bearbeitet:
Hab das ganze Ding jetzt neu, es funktioniert, es funktioniert jedoch die Backspace-Taste zum löschen nicht. Kann mir da einer helfen, was da falsch ist.?!


Hier der Code

Code:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <conio.h>			// wegen getch
#include "ein zeilen edit.h"


#define MaxZeich 41

using namespace std;

int main(int argc, char *argv[])
{
    





// Variablen Definition
char C_string[MaxZeich];               
unsigned char zeich;
int i,n,xpos=5,ypos=5;

gotoxy(xpos,ypos);
// vergleich mit zeich == 0x30
	
    //Beginn Initialisierung
    for (i=0;i<MaxZeich;i++)
	{
		C_string[i]=' ';
	}
	//Ende Initialisierung
	
	
//	C_string= '<Test>';
	//putch(C_string);
	
while(zeich != 0x0D )//Entercode

{zeich = getch();
  
  
  
  if(zeich>=0x30 && zeich<=0x7A || zeich==0x20)          //Zahlen und Buchstaben und Leertaste
            {
                    C_string[xpos] = zeich;
                    putch(zeich);
                    xpos++;
                 
            
            }        
              
                 
  else if (zeich ==0xE0)// Steuerungscode
      {
          zeich = getch();
                 
          switch(zeich)
          {
               case 75: xpos--;    //Steuerzeichen "nach links"
              {C_string[xpos] = zeich;
                
               break;} 
               
              case 77: xpos++;     //Steuerzeichen "nach rechts"
              {C_string[xpos] = zeich;
              
             break;
              }
              
            /* case 82: xpos;     //Steuerzeichen "einfügen"
              {//C_string[xpos] = zeich;
              break;
              }
            */
             
              
              
              default:
              {printf("\a");  }                     //Nicht def. Taste somit Pipton
          }   
         /* if(zeich==0x1B)
          {}
        */
          
      }

               gotoxy(xpos,ypos);
               
              
 

}
//Stop: zeich=0x0D;
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
Also, guck dir mal http://www.cppreference.com/wiki/c/string/start an ... dann kannste dir deine vergleiche da mal alle mit den passenden Funktionen umbauen ...

C++:
#include <cstdlib>
#include <cctype>
#include <conio.h>

const std::size_t max_input(47);

int main()
{
    char data[max_input + 1] = {0};
        
    unsigned int x(5);
    unsigned int y(5);
    gotoxy(xpos,ypos);

    unsigned char input(0);

    do {
        input = getch();
  
        if (std::isprint(input))
        {
            if (x <= max_input)
            {
                data[x++] = input;
                putch(input);
            }
        }        
        else if (std::iscntrl(input))
        {
            switch (input)
            {
                case 75: // carriage left
                {
                    if (x >= 1) --x;
                } break; 
                case 77: // carriage right
                {
                    if (x < max_input) ++x;
                } break;
            }
        }
        else
        {
            putch("\a"); 
        } 

        gotoxy(x, y);
    } while (input != 0x0D);
}
so sollte es doch gehen ...
 
Zurück