einfaches Programm, aber zu viele fehler...brauche dringend hilfe.

Jennesta

Erfahrenes Mitglied
Hallo,
ich soll für die Uni ein Programm schreiben, indem der Benutzer am anfang eine Zahl eingeben soll, wie viele Artikel er eingeben möchte. Dann wird in einer Schleife für jeden Artikel , die Nummer, die Bezeichnung und das Datum eingegeben.
Am Ende wird dann alles Tabellarisch ausgegeben.
Ich bekomme in der Fehlerkonsole aber 13 Fehler und eine Warnung, wobei die meisten aufeinander aufbauen, habe aber keinen blassen Schimmer, was ich nun besser machen soll. Ich poste hier mal den Code und die Fehler...hofffe das mir jemand helfen kann, oder Verbesserungsvorschläge geben kann.

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    int i, k, durchlaeufe;
    char artikelnummer[20];
    char artikel[30];
    char datum[11];
    char *ptr;
    printf("Bitte geben sie an, wie viele Artikel sie einlesen wollen (max:10):");
    scanf("%d", &durchlaeufe);
    char grarray[2][durchlaeufe];
    for(i=1 ; i<=durchlaeufe ; i++) {
        printf("Bitte Artikelnummer eingeben\n");
        fgets(artikelnummer, 20, stdin);
        /* Zeiger auf die Adresse des zeichens \n setzen*/
        if(strchr(artikelnummer, '\n') != NULL) {
            ptr = strrchr(artikelnummer, '\n');
            *ptr = '\0';
        }
        grarray[0][(i-1)] = artikelnummer;
        printf("Bitte Artikelbezeichung eingeben\n");
        fgets(artikel, 30, stdin);
        if(strchr(artikel, '\n') != NULL) {
            ptr = strrchr(artikel, '\n');
            *ptr = '\0';
        }
        grarray[1][(i-1)] = artikel;
        printf("Bitte Datum eingeben\n");
        fgets(datum, 11, stdin);
        if(strchr(datum, '\n') != NULL) {
            ptr = strrchr(datum, '\n');
            *ptr = '\0';
        }
        grarray[2][(i-1)] = datum;
    }
    printf("\n");
    for(k=1;k<=durchlaeufe;k++) {
        printf("%10s - %20s - %15s", grarray[0][(k-1)], grarray[1][(k-1)], grarray[2][(k-1)]);
    }
    return 0;
}

Code:
1>------ Erstellen gestartet: Projekt: Aufgabe2, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>quelle.c
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(12) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\programme\microsoft visual studio 9.0\vc\include\stdio.h(306): Siehe Deklaration von 'scanf'
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(13) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Typ'
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(22) : error C2065: 'grarray': nichtdeklarierter Bezeichner
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(22) : error C2109: Index erfordert ein Array oder einen Zeigertyp
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(29) : error C2065: 'grarray': nichtdeklarierter Bezeichner
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(29) : error C2109: Index erfordert ein Array oder einen Zeigertyp
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(36) : error C2065: 'grarray': nichtdeklarierter Bezeichner
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(36) : error C2109: Index erfordert ein Array oder einen Zeigertyp
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(40) : error C2065: 'grarray': nichtdeklarierter Bezeichner
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(40) : error C2109: Index erfordert ein Array oder einen Zeigertyp
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(40) : error C2065: 'grarray': nichtdeklarierter Bezeichner
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(40) : error C2109: Index erfordert ein Array oder einen Zeigertyp
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(40) : error C2065: 'grarray': nichtdeklarierter Bezeichner
1>h:\eigene dateien\visual studio 2008\projects\aufgabe2\aufgabe2\quelle.c(40) : error C2109: Index erfordert ein Array oder einen Zeigertyp
1>Das Buildprotokoll wurde unter "file://h:\Eigene Dateien\Visual Studio 2008\Projects\Aufgabe2\Aufgabe2\Debug\BuildLog.htm" gespeichert.
1>Aufgabe2 - 13 Fehler, 1 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

mfg Jennesta
 
char grarray[2][durchlaeufe];
das ist dein Fehler das wird so nicht funktionieren. Wenn du das so anlegst muss durchlaeufe fest definiert sein. Darauf bauen alle fehler auf.
 
ach und dann wäre da noch
Code:
grarray[0][(i-1)] = artikelnummer;
grarray[1][(i-1)] = artikel;
grarray[2][(i-1)] = datum;
das kann man nicht mit den = Operator konvertieren(das sind unterschiedlche Datentypen).
 
Öhm ok...dann versuche ich das mal in den Griff zu bekommen, aber kannst du mir vielleicht einen Ansatz geben, wie ichs besser machen kann?

Achja udn wenn ich zb schreibe
char grarray[2][9];
ist das immernoch falsch.
 
Zuletzt bearbeitet:
Öhm ok...dann versuche ich das mal in den Griff zu bekommen, aber kannst du mir vielleicht einen Ansatz geben, wie ichs besser machen kann?

Achja udn wenn ich zb schreibe
char grarray[2][9];
ist das immernoch falsch.
Nein, das wäre syntaktisch OK.

Allerdings hast du noch ein paar andere Fehler gemacht. Ein Array hat soviele Elemente wie bei der Definition angegeben werden. D.h. der gültige Index liegt im Intervall 0 bis (Anzahl - 1)! D.h. in deinem Programm darfst du auf keinen Fall grarray[2] verwenden, da dieses Element im Array gar nicht existiert - du müßtest also dem Array 3 Elemente bei der Deklaration zugestehen.

Dann hast du die grarray als Array von 2x9 Zeichen definiert. Man könnte auch sagen es ist ein Array der Größe 2 von Strings der Länge 9. Man kann also 2 Strings mit 9 Zeichen (inklusive dem Terminierungszeichen) darin speichern. Das ist nicht ganz das was du willst. Du müßtest grarray als Array der Größe 3 von 10 (da steht max:10 in dem printf) Strings der Länge 30 deklarieren:
C:
char grarray[3][10][30];
Normalerweise würde man da aber eher eine Struktur verwenden. Und ich würde das Array auch anders speichern:
C:
char grarray[10][3][30];

Was die Zuweisung betrifft, mußt du dann strcpy verwenden:
C:
strcpy(grarray[0][i-1], artikelnummer);
Gruß
 
Zuletzt bearbeitet:
Ich denke so in der Art hat das der Kolege vor mir sich gedacht und so würde ich die Lösung auch ansetzten(du kannst natürlich auch alles in ein Array speichern).
Code:
#include <stdlib.h>
#include <string>
#include <iostream>

using namespace std;

typedef struct Artikel
{
	char artikelnummer[10][30];
	char artikel[10][30];
	char datum[10][30];
};

int main() 
{
  Artikel a;
  int x;
	
	cout<<"Bitte geben sie an, wie viele Artikel sie einlesen wollen (max:10):"<<endl;
	cin>>x;

    for(int i=0 ; i<x ; i++) 
	{
        cout<<"Bitte Artikelnummer eingeben"<<endl;
        cin>>a.artikelnummer[i];

        cout<<"Bitte Artikelbezeichung eingeben"<<endl;
        cin>>a.artikel[i];

        cout<<"Bitte Datum eingeben"<<endl;
        cin>>a.datum[i];    
    }

	cout<<endl<<endl;

    for(i=0;i<x;i++) 
	{
        cout<<"Artikelnummer :"<<a.artikelnummer[i]<<endl
			<<"Artikelbezeichnung :"<<a.artikel[i]<<endl
			<<"Artikeldatum :"<<a.datum[i]<<endl<<endl;
    }
	
	system("pause");
  return 0;
}
 
Ich denke so in der Art hat das der Kolege vor mir sich gedacht und so würde ich die Lösung auch ansetzten
Naja, nicht ganz. Die Struktur würde ich für einen Artikel definieren, und da wir hier anscheinend über C reden würde das ganze dementsprechend etwas anders aussehen.
C:
typedef struct artikel_t {
  char artikelnummer[20];
  char artikel[30];
  char datum[11];
} artikel;

...

artikel grarray[10]; // 10 Artikel
Gruß
 
@3Cyb3r
Jau also verstehen tue ich C++ und es leuchtet alles ein...ichw erd emir auch mal die structs in C angucken, nur wie deepthroat schon sagte, das muss ich C geschrieben sein. Ich persönlich fände C++ auch besser aber naja kann ich nichts machen.

@deepthroat
also das ich bei dem index [2] nichts habe ist mir auch aufgefallen und hatte ich dirket nachm post nochmal geändert, aber gut, dass du mich auf die idee bringst, dass hier diese 3-fache Arrays hinmüssen. Die Sache ist, dass ich die letzten Jahre fast nur php programmiert habe und mir über die ganzen Typen keine Sorgen machen musste.

Soweit schonmal vielen Dank.
 
Zuletzt bearbeitet:
Zurück