# Caesar Verschlüsselung - Algorithmus für C++ ?



## C152778 (30. Mai 2006)

Guten Abend,

Ich bin gerade dabei mit C++ eine Caesar Verschlüsselung (aus a wird b, aus b wird c usw.) zu erstellen. Allerdings bin ich noch nicht sehr erfahren in C++, daher könnte ich etwas Hilfe gebrauchen!  
Wisst ihr vielleicht, wo es einen solchen Algorithmus für C++ bereits gibt? 

Viele Grüße,
Cyraid


----------



## Buba235 (31. Mai 2006)

Hallo!


Ich weiß nicht genau wie gut du da so bist in C++ und der Kryptographie, aber ich hab da mal nen Artikel für dich der das alles gut beschreibt und den Algo enthält: http://www.linux-magazin.de/Artikel/ausgabe/1997/07/Krypto/krypto1.html

Vielleicht hifts dir weiter!


Gruß Buba


----------



## C152778 (31. Mai 2006)

Hallo!

Danke für deine Antwort Buba235!  
Ich habe mir den Link angeschaut, aber komme leider nicht ganz zurecht damit.
Meine C++ Kentnisse sind wohl noch nicht ausreichend genug dafür..  

Damit ihr euch ein Bild von meinem bisherigen Programm machen könnt, hier mal der Code:

```
// main.cpp - Caesar Verschiebung

#include <iostream>
#include <conio>
#include <stdio>

using namespace std;

int main()
{
  int auswahl, i = 0;
  char klartext[50], geheimtext[50];

  do
  {
    for(i = 0; i <= 50; i++)
    {
      klartext[i] = ' ';
      geheimtext[i] = ' ';
    }

    i = 0;

    clrscr();
    cout << endl;
    cout << "- Caesar Verschiebung -  v1.0" << endl << endl;
    cout << "Menueauswahl:" << endl;
    cout << "Nachricht verschluesseln   [1]" << endl;
    cout << "Nachricht entschluesseln   [2]" << endl;
    cout << "Programm beenden           [3]" << endl << endl;
    cout << "Ihre Auswahl: ";
    cin  >> auswahl;

    switch(auswahl)
    {
      case 1: cout << "Bitte zu entschluesselnde Nachricht (max. 50 Zeichen) eingeben: " << endl;
              cin  >> klartext;

              while (klartext != '\0')
              {
                geheimtext[i] = ((klartext[i] + 1) % 256);
                i++;
              }

              cout << "Verschluesselte Nachricht lautet: " << endl << geheimtext << endl;

              break;

      case 2: cout << "Bitte zu entschluesselnde Nachricht (max. 50 Zeichen) eingeben: " << endl;
              cin  >> geheimtext;

              while (geheimtext != '\0')
              {
                klartext[i] = (geheimtext[i] - 1);
                i++;
              }

              cout << "Entschluesselte Nachricht lautet: " << endl << klartext << endl;

              break;
    }
  } while(auswahl != 3);


  return 0;
```

Ich weiss, er ist sehr umständlich geschrieben, aber besser habe ich es nicht hinbekommen...
 - Das Programm soll ein Menü beinhalten, in dem man sich entscheiden kann, ob man eine Nachricht ver- oder entschlüsseln will. (Verschiebung um 1. Stelle im Alphabet)
 - Die Nachricht soll man eingeben können und darauf soll sie direkt ver- oder entschlüsselt angezeigt werden.

Nur leider klappt das mit meinem Programm hinten und vorne noch nicht!
Ich bekomme Fehlermeldungen wegen irgendwelchen Zugriffsverletzungen..

Könnt ihr mir weiterhelfen?  

Viele Grüße,
Cyraid


----------



## Buba235 (31. Mai 2006)

Hallo!


Ich hab da noch was für dich gefunden. Vielleicht hilft dir das ja weiter: http://www.hackerboard.de/thread.php?threadid=17365


Gruß Buba


----------



## Flegmon (1. Juni 2006)

Das Problem ist deine Schleife (sowohl beim ver- als auch beim entschlüsseln)


```
i = 0;
          ......
              while (klartext != '\0')
              {
                geheimtext[i] = ((klartext[i] + 1) % 256);
                i++;
              }
```


1. wenn du eine Laufvariable nutzt, dann mach mal besser eine for schleife
2. klartext ist nur ein Zeiger. So wie du das nutzen willst musst du noch bestimmen, welche Stelle von dem Array verglichen werden soll
3. das %256 kannst du dir sparen. char reicht nur von -128 bis 127. Wenn du einen Wert über 127 speicherst wird daraus von alleine einer aus dem negativen bereich

das ganze könnte dann so aussehen

```
for(int i = 0; klartext[i] != '\0'; i++)
{
    geheimtext[i] = klartext[i]+1;
}
```

soll das z eigentlich zu einem a werden? denn so wie du das atm machst, wird z nicht zu a


----------



## C152778 (2. Juni 2006)

@Buba235

Vielen Dank für den Link. Ich habe mich dort umgeschaut und viele gute Ansätze und Tipps gefunden! 

@Flegmon

Danke, dass du dir die Mühe gemacht hast, mein Programm anzuschauen!
Du hast Recht, was die Schleifen betrifft. Ich habe daher mein Programm noch einmal überarbeitet. 
Voilà:


```
// main.cpp - Caesar Verschiebung

#include <iostream>
#include <conio>
#include <stdio>

using namespace std;

int main()
{
  int auswahl, i = 0;
  char klartext[50], geheimtext[50];

  do
  {
    for(i = 0; i <= 50; i++)
    {
      klartext[i] = ' ';
      geheimtext[i] = ' ';
    }

    clrscr();
    cout << endl;
    cout << "\n- Caesar Verschiebung -  v1.0" << endl << endl;
    cout << "Menueauswahl:" << endl;
    cout << "Nachricht verschluesseln   [1]" << endl;
    cout << "Nachricht entschluesseln   [2]" << endl;
    cout << "Programm beenden           [3]" << endl << endl;
    cout << "Ihre Auswahl: ";
    cin  >> auswahl;

    switch(auswahl)
    {
      case 1: cout << "Bitte zu entschluesselnde Nachricht (max. 50 Zeichen) eingeben: " << endl;
              cin  >> klartext;

              for(i = 0; klartext[i] != '\0'; i++)
              {
                if(klartext[i] == 'z')
                {
                  geheimtext[i] = 'a';
                }
                else
                {
                  if(klartext[i] == 'Z')
                  {
                    geheimtext[i] = 'A';
                  }
                  else
                  {
                    geheimtext[i] = klartext[i] + 1;
                  }
                }
              }

              cout << "Verschluesselte Nachricht lautet: " << endl << geheimtext << endl;

              break;

      case 2: cout << "\nBitte zu entschluesselnde Nachricht (max. 50 Zeichen) eingeben: " << endl;
              cin  >> geheimtext;

              for(i = 0; geheimtext[i] != '\0'; i++)
              {
                if(geheimtext[i] == 'a')
                {
                  klartext[i] = 'z';
                }
                else
                {
                  if(geheimtext[i] == 'A')
                  {
                    klartext[i] = 'Z';
                  }
                  else
                  {
                    klartext[i] = geheimtext[i] - 1;
                  }
                }
              }

              cout << "Entschluesselte Nachricht lautet: " << endl << klartext << endl;

              break;
    }
  } while(auswahl != 3);


  return 0;
}
```

Mit deinem Tipp funktioniert es recht gut. 
Ich habe zusätzlich 2 if-Verzweigungen eingebaut, um dem Problem, dass z nicht zu a wird, zu entgehen. Meine Lösung scheint mir aber nicht sehr elegant..

Ein weiteres Problem besteht darin, dass meine Zeichenanzahl auf 50 beschränkt ist. Wie kann ich sie unbeschränkt machen bzw. so einstellen, dass sie sich daraus ergibt, wieviel man eingibt?

Muss ich außerdem den Array klartext und geheimtext in einer for-Schleife durchlaufen lassen, um alle Zeichen auf "leer" zu setzen?  
So wie ich es hier, am Anfang des Progamms, gemacht habe:


```
for(i = 0; i <= 50; i++)
    {
      klartext[i] = ' ';
      geheimtext[i] = ' ';
    }
```

Beste Grüße  
Cyraid


----------



## Flegmon (2. Juni 2006)

Cyraid hat gesagt.:
			
		

> Meine Lösung scheint mir aber nicht sehr elegant..



es wird sich kaum eleganter lösen lassen



			
				Cyraid hat gesagt.:
			
		

> Ein weiteres Problem besteht darin, dass meine Zeichenanzahl auf 50 beschränkt ist. Wie kann ich sie unbeschränkt machen bzw. so einstellen, dass sie sich daraus ergibt, wieviel man eingibt?



du hast hier verschiedene möglichkeiten. Die einfachste wäre wohl die Verwendung von std::string, da brauchst du dir um sowas eigentlich keine gedanken zu machen.
Außerdem kannst du mit dem [] immer noch wie von arrays gewohnt umgehen

Kurz zur verwendung


```
#include <string> // NICHT string.h

using namespace std; // damit du nicht std::string schreiben musst

string text;

cin>>text;


/*
zum Zugriff hast du mehrere Möglichkeiten (hier nur ein paar)

1. du kannst mit string[n] auf die stelle n zugreifen (wie bei einem array)

2. du kannst += benutzen um etwas hinzuzufügen (ans Ende)

string s;
s += "Hallo";
s += '1';

3. wenn du nur 1 Zeichen hinzufügen willst (ans Ende), kannst du push_back benutzen

s.push_back('a');

du musst nur drauf achten, bei einem Zeichen ' ' und bei mehreren " " zu benutzen

Zugriff kann zB. so erfolgen
*/

for(int i = 0; i < klarText.length(); i++)
{
   geheimText.push_back(klarText[i] + 1);
}
```



			
				Cyraid hat gesagt.:
			
		

> Muss ich außerdem den Array klartext und geheimtext in einer for-Schleife durchlaufen lassen, um alle Zeichen auf "leer" zu setzen?
> So wie ich es hier, am Anfang des Progamms, gemacht habe:
> 
> 
> ...



wenn du ihn leer haben willst, ist das die einzige methode. Aber normalerweiße braucht man einen string nicht leeren


----------



## C152778 (3. Juni 2006)

@Flegmon

Vielen Dank für deine ausführlich Antwort und Erklärung! 

Das mit string ist eine gute Idee. Mit push_back() klappt das auch wunderbar, allerdings ergibt sich daraus ein neues Problem.
Wenn mein Programm einmal durchgelaufen ist und man noch einmal auswählt eine Nachricht entschlüsseln zu wollen, werden die weiteren Zeichen an die der vorigen Nachricht dran gehängt, was natürlich sehr störend ist.

Um das zu vermeiden habe ich mir überlegt (wie du es auch schon erwähnt hast), den string wie ein array zu benutzen.
Also folgendermaßen:


```
for(i = 0; i < klartext.length(); i++)
              {
                geheimtext[i] = klartext[i] + 1;
              }

              cout << "Verschluesselte Nachricht lautet: " << endl << geheimtext << endl;
```

Daraufhin wird mir allerdings nichts ausgegeben, als wäre nichts in geheimtext geschrieben worden. Habe ich einen Fehler bei der Verwendungs des strings gemacht? Mir wird kein Fehler angezeigt..


Hier noch einmal mein komplettes Programm (Die Entschlüsselung ist noch beim alten):


```
// main.cpp - Caesar Verschiebung

#include <iostream>
#include <conio>
#include <stdio>
#include <string>

using namespace std;

int main()
{
  int auswahl, i = 0;
  string klartext, geheimtext;

  do
  {
    clrscr();
    cout << endl;
    cout << "\n- Caesar Verschiebung -  v1.0" << endl << endl;
    cout << "Menueauswahl:" << endl;
    cout << "Nachricht verschluesseln   [1]" << endl;
    cout << "Nachricht entschluesseln   [2]" << endl;
    cout << "Programm beenden           [3]" << endl << endl;
    cout << "Ihre Auswahl: ";
    cin  >> auswahl;

    switch(auswahl)
    {
      case 1: cout << "Bitte zu entschluesselnde Nachricht (max. 50 Zeichen) eingeben: " << endl;
              cin  >> klartext;

              for(i = 0; i < klartext.length(); i++)
              {
                geheimtext[i] = klartext[i] + 1;
              }

              cout << "Verschluesselte Nachricht lautet: " << endl << geheimtext << endl;

              break;

      case 2: cout << "\nBitte zu entschluesselnde Nachricht (max. 50 Zeichen) eingeben: " << endl;
              cin  >> geheimtext;

              for(i = 0; geheimtext[i] != '\0'; i++)
              {
                if(geheimtext[i] == 'a')
                {
                  klartext[i] = 'z';
                }
                else
                {
                  if(geheimtext[i] == 'A')
                  {
                    klartext[i] = 'Z';
                  }
                  else
                  {
                    klartext[i] = geheimtext[i] - 1;
                  }
                }
              }

              cout << "Entschluesselte Nachricht lautet: " << endl << klartext << endl;

              break;
    }
  } while(auswahl != 3);


  return 0;
}
```

Viele Grüße,
Cyraid


----------



## Flegmon (4. Juni 2006)

Der string speichert intern seine länge. Wenn du mit [] die einzelnen zeichen setzt, verhindert der string, dass es eine zugriffsverletzung gibt, da es ja über die gespeicherte länge hinausgeht.

Wenn du den string löschen willst mach einfach string = "";


----------



## C152778 (5. Juni 2006)

@Flegmon

Danke für deine Antwort! 

Deine Antwort macht Sinn, eines ist mir dabei allerdings nicht ganz klar.
Der String sieht also eine Zugriffsverletzung, wenn ich mit [] ein einzelnes Zeichen setze.
Welche Länge bzw. welchen Speicher sieht er als verletzt, wenn ich ihn doch ohne Angabe einer Länge deklariert habe?


```
string klartext, geheimtext;
```

Müsste die Länge des Strings sich nicht erst durch die Eingabe des Benutzers ergeben  

Viele Grüße,
Cyriad


----------



## Flegmon (5. Juni 2006)

Ich hab mal nachgeschaut im Source Code.

Also mit der länge meine ich, die Länge der gespeicherten Daten.
Beim [] wird aber nicht überprüft, ob es eine Verletzung gibt. Mein Fehler sry.
Intern ist der string auch nur ein Array. Der hat am anfang eine gewisse größe (ich glaub je nach pc anders, aber passen schon recht viel zeichen rein). Und sobald man zuweit schreibt (also über die größe des Arrays hinaus) block die string Klasse das.

Ich hab jetzt nicht genauer nachgeschaut, wie die string klasse aufgebaut ist.
Wenn es dich interresiert, dann kannst du mal bei deinem include verzeichnis schauen,
da kannst du den ganzen source der stl anschauen.


----------



## C152778 (5. Juni 2006)

@Flegmon

Ich versuche gerade das Programm mit dieser Variante zum Laufen zu bringen:


```
for(i = 0; i < klartext.length(); i++)
              {
                geheimtext[i] = klartext[i] + 1;
              }

              cout << "Verschluesselte Nachricht lautet: " << geheimtext << endl;
```

Allerdings bekomme ich keine Ausgabe des Strings geheimtext, stattdessen eine Meldung 
"main.cpp": W8012 Vergleich von signed- und unsigned-Werten in Funktion main() in Zeile 32". 

Zeile 32 ist folgende:


```
for(i = 0; i < klartext.length(); i++)
```

Ob dadurch nichts in den String geheimtext geschrieben wird?
Wie könnte man diesen Fehler beheben?


Zum include Verzeichnis und dem Source Code.
Ich kann dir da nur teilweise folgen, da stößt mein C++ Wissen leider schon an seine Grenzen. 
Ich habe einen Blick in die header-Datei von string riskiert, kann aber nicht viel mit dem Inhalt anfangen.

Viele Grüße,
Cyraid


----------



## Flegmon (5. Juni 2006)

zu den headern,

wenn du dev-c++ benutzt, kannst du nich viel in dem header nachschauen, da dort der Zeilenumbruch nicht richtig angezeigt wird. Aber wenn du noch keine templates kennst,
bringt es dir sowieso noch nicht viel da zu schauen.

Zu deinem Problem. Die Meldung ist nur eine Warnung, es sollte trotzdem funktioniere.
Nutze lieber die Variante davor und setze die string nach jedem durchlauf zurück...


----------



## C152778 (6. Juni 2006)

@Flegmon

Erstmal: Danke wieder für deine Antwort!  

Ich benutze den C++ BuilderX. Die Header-Dateien werden mir mit Zeilenumbruch, also richtig, dargestellt. Ich verstehe allerdings trotzdem nicht sehr viel davon, nur sehr sehr vage. 

Ich habe, wie du vorgeschlagen hast, wieder die vorherige Variante benutzt, die mit push_back(). Funktioniert auch einwandfrei, nur komme ich nun wieder an mein altes Problem..
Ich musste nämlich auch bei dieser Variante wieder auf ein paar Zeichen mittels [] zugreifen, um von 'z' zu 'a' zu kommen. Doch das funktioniert, wie oben schon, leider nicht.
So sieht meine for-Schleife zur Verschluesselung nun aus:


```
for(i = 0; i < klartext.length(); i++)
              {
                if(klartext[i] == 'z')
                {
                  geheimtext[i] = 'a';
                }
                else
                {
                  if(klartext[i] == 'Z')
                  {
                    geheimtext[i] = 'A';
                  }
                  else
                  {
                    geheimtext.push_back(klartext[i] + 1);
                  }
                }
              }
```

Wenn ich bei dieser Variante ein 'z' eingebe passiert, so scheint es, im geheimtext String nichts.

Hier ein Auszug aus dem laufenden Programm:

Bitte zu entschluesselnde Nachricht (max. 50 Zeichen) eingeben: 
abza
Verschluesselte Nachricht lautet: bcb

Wie du siehst, wird die Stelle mit dem 'z' bei der Verschlüsselung ganz übersprungen.
Wo steckt der Fehler?
Oder gibt es eine Möglichkeit das zu umgehen?

Viele Grüße,
Cyraid


----------



## Flegmon (7. Juni 2006)

Ich habs jetzt mal ausprobiert. Das problem is wirklich das, dass er intern die länge speichert. Hab aber einen sehr einfachen weg gefunden es zu umgehen. Man kann die länge nämlich manuel ändern. 

Versuchs mal mit 

geheimtext._Mysize++;


```
nach geheimtext[i] = 'A';
```
das könnte evtl. funktionieren

EDIT: da fällt mir ein, warum baust du nicht schon beim verschlüsseln folgendes ein:


```
if(klartext[i] == 'z')
  geheimtext.push_back('a');
else
 geheimtext.push_back(klartext[i]+1);
```


----------



## C152778 (7. Juni 2006)

Beim geheimtext habe ich probiert die Funktion mysize zu verwenden, klappt aber nicht so richtig.. 
Da kommt bei mir eine Fehlermeldung.

Ist aber nicht weiter schlimm, denn dein anderer Vorschlag, bereits bei der If-Verzweigung push_back einzubauen klappt perfekt!
Aber erst einmal darauf kommen...  ganz nach dem Motto:
Warum einfach, wenn es auch kompliziert geht?  


So, nun gibt es noch ein letztes kleines Problem.
(Der Thread nähert sich dem Ende   )
Damit die verschlüsselte Nachricht auch noch zu lesen ist und nicht gleich das Menü wieder kommt, habe ich folgendes eingebaut:


```
cout << "\n\t- Beliebige Taste zum Fortfahren drücken -" << endl;
              cin  >> taste;
```

Die Variable "taste" ist eine integer Variable.
Das mit dem Taste drücken funktioniert damit allerdings nur begrenzt. Denn damit es weiter geht muss man eine Zahl eingeben und anschließend auf Enter drücken. 
Was muss ich tun, damit man tatsächlich nur eine beliebige Taste drücken muss?

Viele Grüße,
Cyraid


----------



## deepthroat (7. Juni 2006)

Hi.





			
				Flegmon hat gesagt.:
			
		

> wenn du dev-c++ benutzt, kannst du nich viel in dem header nachschauen, da dort der Zeilenumbruch nicht richtig angezeigt wird.


Mit einem vernünftigen Editor werden die Dateien auch richtig angezeigt.


			
				Flegmon hat gesagt.:
			
		

> Ich habs jetzt mal ausprobiert. Das problem is wirklich das, dass er intern die länge speichert. Hab aber einen sehr einfachen weg gefunden es zu umgehen. Man kann die länge nämlich manuel ändern.
> 
> Versuchs mal mit
> 
> ...


Wozu soll das denn gut sein? (mal ganz abgesehen davon das es nicht funktionieren sollte - was benutzt du denn für einen Compiler?).

Die C++ std::string Klasse besitzt eine resize Methode. Das Richtige wäre also die beiden Strings auf die gleiche Länge zu bringen bevor du in die Schleife gehst.

Gruß


----------



## C152778 (8. Juni 2006)

deepthroat hat gesagt.:
			
		

> Die C++ std::string Klasse besitzt eine resize Methode. Das Richtige wäre also die beiden Strings auf die gleiche Länge zu bringen bevor du in die Schleife gehst.



Erst einmal danke für deine Antwort @deepthroat! 

Du hast Recht, mit der resize Methode geht es.
Ich habe es ausprobiert. Man kann dadurch auf den String wie bei einem Array zugreifen.
So sieht das dann aus:


```
geheimtext.resize(klartext.size());

              for(i = 0; klartext[i] != '\0'; i++)
              {
                if(klartext[i] == 'z')
                {
                  geheimtext[i] = 'a';
                }
                else
                {
                  if(klartext[i] == 'Z')
                  {
                    geheimtext[i] = 'A';
                  }
                  else
                  {
                    geheimtext[i] = klartext[i] + 1;
                  }
                }
              }
```

Damit hätten wir nun zwei Lösungen für mein bisheriges Problem  

Bleibt nur noch das letzte Problem übrig, siehe oben.

Viele Grüße,
Cyraid


----------



## Flegmon (8. Juni 2006)

@deepthroat

ich hab nur kurz mit dem notepad nen blick drüber geworfen.

ich benutze VC++ .net 2003 und hab nur ganz kurz geschaut, ob es mit [] wirklich nicht geht. mit _mySize hats funktioniert! Die resize methode hatte ich wohl übersehen und ansonsten arbeite ich nich viel mit der string klasse... aber naja war ja nur ein versuch


und zum Problem mit cin. Benutze doch getch() (conio.h), dass wartet auf einen Tastendruck


----------



## deepthroat (8. Juni 2006)

Cyraid hat gesagt.:
			
		

> Damit die verschlüsselte Nachricht auch noch zu lesen ist und nicht gleich das Menü wieder kommt, habe ich folgendes eingebaut:
> 
> 
> ```
> ...


Das ist nicht so einfach zu sagen da die Antwort abhängig von der Umgebung (Betriebssystem/Terminal) ist. Aber unter Windows kannst du das Programm pause aufrufen:
	
	
	



```
cout << "Taste drücken..." << endl;
system("pause > nul");
```
Gruß


----------



## C152778 (8. Juni 2006)

@Flegmon

getch() habe ich ausprobiert, aber so richtig scheint das nicht zu funktionieren.
Jedenfalls geht das Programm, wenn ich es in meinem Compiler (C++ BuilderX) starte nicht weiter. Es bleibt hängen, egal wie oft ich eine Taste drücke.
Wenn ich das Programm aber über die exe Datei öffne klappt es. Spinnt mein Compiler oder liegt das an der Funktion?

Viele Grüße,
Cyriad


----------



## Flegmon (8. Juni 2006)

Cyraid hat gesagt.:
			
		

> Wenn ich das Programm aber über die exe Datei öffne klappt es. Spinnt mein Compiler oder liegt das an der Funktion?



wird wohl an der Funktion liegen. Wahrscheinlich führst du sie über die IDE im Debug-Modus aus.
Wenn nicht versuchs mal mit deepthroats variante


----------



## C152778 (8. Juni 2006)

deepthroat hat gesagt.:
			
		

> Das ist nicht so einfach zu sagen da die Antwort abhängig von der Umgebung (Betriebssystem/Terminal) ist. Aber unter Windows kannst du das Programm pause aufrufen:
> 
> 
> 
> ...



Jepp, damit geht es auch beim Ausprobieren im Compiler selbst.

Mir fällt aber gerade auf, dass z.B. die Funktion clrscr() im Compiler selbst auch nicht funktioniert... 

Viele Grüße,
Cyraid


----------



## deepthroat (8. Juni 2006)

Flegmon hat gesagt.:
			
		

> @deepthroat
> 
> ich hab nur kurz mit dem notepad nen blick drüber geworfen.


Schau dir nächstes Mal lieber eine STL Referenz an und nicht den Code von VS C++. Tatsächlich ist aber _Mysize als public definiert und man kann es nach Belieben ändern. Ich halte das für einen eklatanten Fehler - das kann ich so nicht nachvollziehen. Andere STL Implementation haben diese Membervariable natürlich nicht bzw. es gibt keinen Zugriff darauf. Zumindest wurde ein einzelner Unterstrich als Präfix benutzt um zu signalisieren das die Variable implementationsspezifisch ist.

Gruß


----------



## Flegmon (8. Juni 2006)

deepthroat hat gesagt.:
			
		

> Tatsächlich ist aber _Mysize als public definiert und man kann es nach Belieben ändern. Ich halte das für einen eklatanten Fehler - das kann ich so nicht nachvollziehen.



hat mich ehrlich gesagt auch gewundert...
wollte mir den source trotzdem unbedingt mal anschauen, da man manchmal liest, dass es unnötig viel wäre und so nich gut für die performance sein soll.


----------



## C152778 (11. Juni 2006)

@Flegmon und deepthroat

Danke an euch beide für eure Hilfe, alles klappt soweit!  

Nur eines ist mir noch nicht ganz klar.
Warum funktioniert clrscr() beim Testen im Compiler selbst nicht, dafür aber beim Ausführen der exe Datei  

Viele Grüße,
Cyriad


----------



## deepthroat (11. Juni 2006)

Cyraid hat gesagt.:
			
		

> Nur eines ist mir noch nicht ganz klar.
> Warum funktioniert clrscr() beim Testen im Compiler selbst nicht, dafür aber beim Ausführen der exe Datei


Wahrscheinlich benutzt die Borland Umgebung eine eigene Implementierung des Terminals in dem das Programm ausgeführt wird. Dieses Terminal wird wahrscheinlich nicht alle Befehle bzw. Escape Sequenzen implementieren die die Standard-DOS-Box von Windows kennt. Als Alternative kannst du ja mal versuchen den DOS Befehl cls per system() Funktion aufzurufen. Dieser Befehl benutzt evlt. andere Low-Level Funktionen um den Bildschirm zu löschen als die clrscr() von Borland.

Gruß


----------

