mikrocontroller.net

Forum: PC-Programmierung C++ Fehler im Quellcode


Autor: gentleBen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi ich habe ein kleines Programm geschrieben welches ein paar Zeichen in 
einem bestimmten Muster ausgeben soll. Doch dabei habe ich einen Fehler 
und ich weiß ihn nicht zu beheben.

Vielleicht findet ihr ja den Fehler. Hier ist der Quellcode:

#include <conio.h>
#include <iostream.h>

struct sZeichen
{
  char letter;
  char matrix[11][8];
  int width;
};

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

  int coloum = 20;
  int x = 2;
  int y = 2;

  // Initialisierung des Bildschrims;

  for (int k = 0; k < 15; k++) {
    if(k % 2 == 0)
    {
      gotoxy(x,y);
      for (int i = 0; i < coloum; i++) {
        cout << "O   ";
      }
      x += 2;
      y += 2;
    }
    else
    {
      gotoxy(x,y);
      for (int i = 0; i < coloum-1; i++) {
        cout << "O   ";
      }
      x -= 2;
      y += 2;
    }
  }

  // Ende der Initialisierung

  sZeichen A;
  A.letter = 'A';
  A.width = 9;
  /*  Zeichen Legende
    O = LED aus
    # = LED ein
    - = LED nicht vorhanden
  */

  A.matrix =
  {                        // <---- Zeile 54
  //  1   2   3   4   5   6   7   8   9   10  11
    {'O','#','#','#','#','#','#','#','O','O','O'},
    {'O','#','#','O','#','O','#','#','O','O','O'},
    {'#','#','O','O','O','O','O','#','#','O','O'},
    {'#','#','O','#','O','#','O','#','#','O','O'},
    {'#','#','#','O','#','O','#','#','#','O','O'},
    {'#','#','O','O','O','O','O','#','#','O','O'},
    {'#','#','O','O','O','O','O','#','#','O','O'},
    {'#','-','O','-','O','-','O','-','#','O','O'},
  };


  getch();

  return 0;
}

Der Fehler befindet sich an der Zeile 54 so zeigt es zumindest der 
Compiler. Ich hoffe ihr könnt mir weiterhelfen.

Lieben Gruß

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gentleBen schrieb:

> Der Fehler befindet sich an der Zeile 54 so zeigt es zumindest der
> Compiler. Ich hoffe ihr könnt mir weiterhelfen.

und was für ein Fehler auftritt ist mal wieder ein Geheimnis...das eine 
Komma dürfte zu viel sein...

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Justus Skorps schrieb:
> und was für ein Fehler auftritt ist mal wieder ein Geheimnis...das eine
> Komma dürfte zu viel sein...
Zumindest in C ist das Komma sogar explizit erlaubt.

Autor: Mark .. (mork)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ben,

man kann in C(++) einem ganzen Array nicht mitten im Programm einen Wert 
zu weisen, das geht NUR bei der Initialisierung. Du musst die Elemente 
also alle einzeln beschreiben.

Oder Du könntest auch ein globales Array definieren und in der main 
dieses Array in A.matrix kopieren:
const char init_matrix[11][8] =
{ 
  //  1   2   3   4   5   6   7   8   9   10  11
    {'O','#','#','#','#','#','#','#','O','O','O'},
    {'O','#','#','O','#','O','#','#','O','O','O'},
    {'#','#','O','O','O','O','O','#','#','O','O'},
    {'#','#','O','#','O','#','O','#','#','O','O'},
    {'#','#','#','O','#','O','#','#','#','O','O'},
    {'#','#','O','O','O','O','O','#','#','O','O'},
    {'#','#','O','O','O','O','O','#','#','O','O'},
    {'#','-','O','-','O','-','O','-','#','O','O'},
};

int main()
{
    sZeichen A;
    int i, j;
    
    for(i=0; i<11; i++)
        for(j=0; j<8; j++)
            A.matrix[i][j] = init_matrix[i][j];
}

MfG Mark

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> man kann in C(++) einem ganzen Array nicht mitten im Programm einen Wert
> zu weisen, das geht NUR bei der Initialisierung.

In der nächsten Version von C++ wird das gehen.

Bis dahin würde es sich aber zumindest anbieten, das eher umständliche
    
    for(i=0; i<11; i++)
        for(j=0; j<8; j++)
            A.matrix[i][j] = init_matrix[i][j];

durch ein lesbareres
    memcpy(A.matrix, init_matrix, sizeof(A.matrix));

zu ersetzen.

Autor: Stupstrub (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> In der nächsten Version von C++ wird das gehen.

w00t oO  Ernsthaft???

Autor: th (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Neuere Versionen von g++ unterstützen es sogar schon, wenn man mit
-std=c++0x übersetzt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.