[c++] String Frage

W

Willüüü

Gast
Code:
#include <conio.h>     //Header notwendig wegen getch()
#include <iostream.h>  //Header notwendig wegen cout, cin
#include <iomanip.h>   //Header notwendig wegen setw(..), setprecision(..)
                       //                       und setiosflags(..)
 void main(void)
  {

  char zeikette[5][11];
  char a;

  do
  {
  cout<<setw(40)<<"EINGABE DER ZAHLEN\n\n";

  for(int i=0;i<5;i++)
  {
  cout<<"\nGib Namen mit max. 10 Zeichen ein: ";
  cin>>zeikette[i];
  }

  for(int i=0;i<5;i++)
  {
  cout<<"\n\n"<<setw(30)<<zeikette[i];
  }
  cout<<"\n\n"<<setw(40)<<"Wiederholen? -j/n: ";
  cin>>a;
  getch();
  clrscr();
  }
  while(a !='n');
  cout<<"BEENDEN MIT TASTE DRUECKEN!!!";
  getch();
  }

Muss ich bei diesem Programm das Feld an der einen Stelle immer mit cin>>zeikette;
einlesen oder gibt geht es auch mit cin>>zeikette[5][11];
Gibt es Fälle wo man nur so cin>>zeikette[5][11]; einlesen kann?

Thx an die Programmierer hier.

Willüüü

//Edit by Green Mamba
Ich hab mir mal erlaubt den code in Tags einzubinden, und ein Präfix ins Topic zu basteln. ;)
 
Zuletzt bearbeitet:
1. Du musst bei deinem cin schon zeikette schreiben, weil dann der eingelesene String an die folgenden 11 "Stellen" geschrieben wird.

2. Fälle wo du cin >> zeikette[x][y] schreiben kannst sollte es nicht geben, außer die Tabelle zeikette ist dreidimensional, also zeikette[x][y][z].

3. Wie du programmierst ist gefährlich!
Wenn jemand mehr als 10 Zeichen eingibt, dann wird in Speicher geschrieben, der nicht dir gehört. Das ist dann das was man als Puffer Überlauf (Buffer Overflow) bezeichnet.
Du solltest dann schon mit der Klasse string arbeiten um diese Unsicherheit zu umgehen.

4. Korrekte Programme sehen so aus:
Code:
int main()
{
    ...
    return 0;
}
Moderne Compiler sollten das void main eigentlich bemängeln.

PS: Ersetze getch() und conio.h durch cin.get(). conio.h Funktionen sind nicht portabel!
Genausowenig, wie die daraus stammende clrscr() funktion.
 
Zurück
Oben