ich hab keine ahnung mehr



  • Meine Güte, wie kann man nur so unfähig sein... 🙄

    Zuerst

    und dann
    

    , und nicht umgekehrt!
    Ausserdem würde es reichen, nur den relevanten Codeteil zu posten!



  • ja super danke für die ganz tollen antworten
    wenn ich das alles wüsste hätte ich hier keine frage gestellt

    #include <iostream.h>
    #include <stdlib.h>
    #include <iomanip.h>
    #include <stdio.h>
    
    struct speichern
    {   //int matr;
    	char Name[20];
    	char Vorname[20];	
    
    } ;
    
    void main()
    {
        speichern mit[20];
    FILE* datei;
    datei = fopen("test.txt","w");
    
    	int Auswahl,j;//J steht für den strich
    
    	do
    	{
    		cout<<"	\n\n\n				 Gruppenarbeit	\n";
    
    	for (j=0;j<80;j++)
    		cout<<"-";
    
    		cout<<"Bitte w"<<char (900)<<"hlen Sie ein Programm aus...\n\n";
    		cout<<"Programm		***Sortieralgorithmus			:	[1]\n";
    		cout<<"Programm		***Darstellung eines Dreicks		:	[2]\n";
    		cout<<"Programm		***Berechung der Determinante		:	[3]\n";
    		cout<<"Programm		***Multiplikation zweier Matrizen	:	[4]\n";
    		cout<<"Programm		***Berechung des Fl"<<char (900)<<"cheninhaltes	:	[5]\n\n\n";
    
    		cout<<"					Programmabruch!!!  	:	[0]\n";
    		cout<<"\n\n\n";
    
    		cout<<"\nWelches Programm wollen Sie nutzen??? : ";
    		cin>>Auswahl;
    
    		switch (Auswahl)
    			{
    			case 0:
    				{cout<<"\n			*** Programm beenden ***\n";
    				cout<<"\a";
    				}
    				break;
    //----------------------------------------------------------------------------------------
    
    			case 1:
    
    				{	
    	int AnzahlReihen, AnzahlSpalten, i, k, m, z;//i ist für AnzahlReihen
    	double	ZeileSpalte[10] [10], temp;	
    
    	z=1;					// Zähler in der Ausgabe als Information
    
    		cout<<endl;
    		cout<<"Programm zum Einlesen von Werten in w"<<char (900)<<"hlbar grosse Zeilen/Spalten (max. 10)"<<endl<<endl;
    
    		for (j=0;j<80;j++)
    		cout<<"-";
    
    		cout<<endl<<endl;
    		cout<<"Bitte Anzahl der Reihen eingeben?  ";
    		cin>>AnzahlReihen;
    
    		cout<<"Bitte Anzahl der Spalten eingeben? ";
    		cin>>AnzahlSpalten;
    		cout<<endl<<endl;
    
    	for (i=0;i<AnzahlReihen;i++)		
    	{	
    		cout<<"Geben Sie bitte die   "<<z++<<".   Reihe ein:  ";		
    			for (m=0;m<AnzahlSpalten;m++)		
    			{
    				cin>>ZeileSpalte[i][m];
    			}
    	}	
    	cout<<endl<<endl;	
    
    	for (j=0;j<80;j++)
    			cout<<char (196);
    
    	cout<<"Es ergibt sich folgende Sortierung:"<<endl;
    	cout<<"(von klein nach gross)"<<endl<<endl;
    
    	for (i=0;i<AnzahlReihen-1;i++)
    	{
    
    			for (k=i+1;k<AnzahlReihen;k++)
    			{
    				if (ZeileSpalte[i][0]>ZeileSpalte[k][0])
    				{
    					for (m=0;m<AnzahlSpalten;m++)
    					{
    					temp=ZeileSpalte[i][m];
    					ZeileSpalte[i][m]=ZeileSpalte[k][m];
    					ZeileSpalte[k][m]=temp;
    					}				
    				}
    			}
    	}
    	for (i=0;i<AnzahlReihen;i++)
    	{
    		cout<<endl;
    		cout<<"         -->   ";
    		for (m=0;m<AnzahlSpalten;m++)			
    			cout<<ZeileSpalte[i][m]<<"   ";			
    	}		
    	cout<<endl<<endl;
    
    break;
    
    			case 2:
    
    				{
    	int hoehe, breite,spitze;
    	int x=35,za,weite=2;
    
    	cout<<"\tProgramm zur Darstellung eines gleichschenkeligen Dreiecks"<<endl<<endl;
    
    cout<<"benutzer name?:";
    		cin>>mit[i].Name;
    
            cout<<"benutzervorname?:";
    		cin>>mit[i].Vorname;
    
    //cout<<"matrikelnummer??:";
    		//cin>>mit[i].matr;
    
    	cout<<"Bitte geben Sie die gewuenschte Breite des Dreiecks ein :	";
    	cin>>breite;
    	cout<<endl<<"Bitte geben Sie die gewuenschte Hoehe des Dreiecks ein   :	";
    	cin>>hoehe;
    
    	cout<<endl<<endl<<endl;
    
    	if (((breite>5) && (hoehe>5)) && ((breite<25) && (hoehe<25)))
    	{
    		cout<<"Wie soll denn das Dreieck dargestellt werden?"<<endl;
    		cout<<"\t\t\t\t[1 = Spitze oben][2 = Spitze unten]	";
    		cin>>spitze;
    
    fwrite(&mit[i],sizeof(mit[i]),2,datei);
    
    fclose(datei);
    
    		switch (spitze)
    		{
    			case 1:
    				{
    						cout<<setw(x);															
    						cout<<char(05)<<endl;
    						x=x--;
    
    					for (za=3; za<=hoehe; za++)
    					{
    						cout<<setw(x);
    						cout<<char(05)<<setw(weite)<<char(05)<<endl;
    						x--;
    						weite=weite+2;
    					}
    
    					cout<<setw(x);
    
    					for (za=0; za<breite; za++)
    					{
    						cout<<char(05);
    						cout<<char(00);
    					}
    					cout<<endl<<endl;
    				}	break;
    
    			case 2:
    				{
    					x=x-breite;
    					cout<<setw(x);
    
    					for(za=1; za<=breite; za++)
    					{
    						cout<<char(05);
    						cout<<char(00);
    					}
    
    					cout<<endl;
    					x++;
    
    					for (za=3; za<=hoehe; za++)
    					{
    						cout<<setw(x);
    						cout<<char(05)<<setw((breite*2)-weite-2)<<char(05)<<endl;
    						x++;
    						breite--;							
    					}
    
    					cout<<setw(34)<<char(05)<<endl;
    
    				}	break;
    			default:
    				{
    					cout<<"Leider haben sie einen unzulässigen wert eingegeben"<<endl;
    				}
    		}
    	}
    	else
    	{
    		cout<<"Leider haben sie einen unzulässigen wert eingegeben"<<endl;
    		cout<<"Hier fehlt noch ein sprung zurück zum Start";
    	}
    
    }
    				break;
    
    		}
    		}
    
    	}	
    		while (Auswahl != 0);
    
    	cout<<"\n		  	  *** Programmende ***\n\n";
    	cout<<"		     *** Danke fuer Ihre Geduld ***\n";
    
    }
    


  • also ich hab nicht wirklich ahnung von der ganzen materie

    also ich hab die folgende struktur
    :

    struct speichern 
    { //int matr; 
    char Name[20]; 
    char Vorname[20]; 
    
    } ;
    

    die variablen werden dann hier eingegeben:

    cout<<"benutzer Name?:"; 
    cin>>mit[i].Name; 
    
    cout<<"Benutzer Vorname?:"; 
    cin>>mit[i].Vorname; 
    
    //cout<<"Matrikelnummer??:"; 
    //cin>>mit[i].matr;
    

    so läuft es und die ersten zwei variablen werden auch gespeichert nehme
    ich jetzt die dritte mit rein bekomme ich keine fehlermeldungen aber das programm stürzt immer ab.



  • Nexus schrieb:

    Meine Güte, wie kann man nur so unfähig sein... 🙄

    Zuerst

    und dann
    

    , und nicht umgekehrt!
    Ausserdem würde es reichen, nur den relevanten Codeteil zu posten!

    wenn ich mir sicher währe das es genau an dem cod teilen liegt dann hätte ich die auch einzeln gepostet ich weiß es aber nicht bzw. denke das es auch durchaus an etwas anderem liegen könnte.



  • struct speichern    // das struct...
    { 
       int matr;
       char Name[20];
       char Vorname[20];
    };
    
    // die eingabe
    cin >> mit[i].matr;
    cin.getline(mit[i].Name, 20);
    cin.getline(mit[i].Vorname, 20);
    

    was soll daran nicht funktioneren?
    natürlich iostream includen und auf den namespace achten...

    der fehler muss woanders liegen



  • nina1980 schrieb:

    ja super danke für die ganz tollen antworten
    wenn ich das alles wüsste hätte ich hier keine frage gestellt

    nina1980 schrieb:

    mein problem ist das das untere programm so läuft und die strucktur beim starten des 2 programm teils auch läuft und speichert wenn ich jetzt aber die struktur erweitern will also die ausgeblendete variable in der strucktur und die 2 dazugehörigen zeilen weiter unten aktiviere bekomme ich vom compieler keinen fehler aber das programm stürzt immer ab worann kann das liegen ich komme schon seit stunden nicht weiter und weiß nicht was ich noch machhen soll
    und montag muss das fertig sein.

    Das nenne ich keine Frage.

    Nina1980 schrieb:

    wenn ich mir sicher währe das es genau an dem cod teilen liegt dann hätte ich die auch einzeln gepostet ich weiß es aber nicht bzw. denke das es auch durchaus an etwas anderem liegen könnte.

    Wie wärs, wenn du dich selber ein bisschen bemühen würdest? Wir haben es hier nicht so gerne, wenn man kommt und sagt "Hallo, in meinem 233-zeiligen Programm ist ein Fehler, bitte sucht ihn". Du solltest eventuell mal aktuell Header einbinden und int main() schreiben, wobei das kaum die Fehlerursache ist.



  • Skym0sh0 schrieb:

    struct speichern    // das struct...
    { 
       int matr;
       char Name[20];
       char Vorname[20];
    };
    
    // die eingabe
    cin >> mit[i].matr;
    cin.getline(mit[i].Name, 20);
    cin.getline(mit[i].Vorname, 20);
    

    was soll daran nicht funktioneren?
    natürlich iostream includen und auf den namespace achten...

    der fehler muss woanders liegen

    ja genau das hab ich mir auch gedacht !!!!!!!!!!!!!
    da ich aber nicht weiß wo der fehler liegt hab ich zuerst alles gepostet!!!!!!!!!!!!!
    und da der fehler nur auftritt wenn ich die "matr" variable mit reinnehme
    hab ich das noch mal einzeln gepostet !!!!!!

    weil ich darauf ja hingewiesen wurde !!!!!!!

    also der compiler zeigt mir auch keine fehler oder warnungen aber das programm
    stürzt immer im laufen ab.



  • Nexus schrieb:

    nina1980 schrieb:

    ja super danke für die ganz tollen antworten
    wenn ich das alles wüsste hätte ich hier keine frage gestellt

    nina1980 schrieb:

    mein problem ist das das untere programm so läuft und die strucktur beim starten des 2 programm teils auch läuft und speichert wenn ich jetzt aber die struktur erweitern will also die ausgeblendete variable in der strucktur und die 2 dazugehörigen zeilen weiter unten aktiviere bekomme ich vom compieler keinen fehler aber das programm stürzt immer ab worann kann das liegen ich komme schon seit stunden nicht weiter und weiß nicht was ich noch machhen soll
    und montag muss das fertig sein.

    Das nenne ich keine Frage.

    Nina1980 schrieb:

    wenn ich mir sicher währe das es genau an dem cod teilen liegt dann hätte ich die auch einzeln gepostet ich weiß es aber nicht bzw. denke das es auch durchaus an etwas anderem liegen könnte.

    Wie wärs, wenn du dich selber ein bisschen bemühen würdest? Wir haben es hier nicht so gerne, wenn man kommt und sagt "Hallo, in meinem 233-zeiligen Programm ist ein Fehler, bitte sucht ihn". Du solltest eventuell mal aktuell Header einbinden und int main() schreiben, wobei das kaum die Fehlerursache ist.

    Ja das ist mir schon klar wenn ich nicht seit heute morgen um 7 an dem einn blöden fehler sitzen würde dann hätte ich auch nicht gefragt sorry ich behmühe mich jetzt seit c. 12 stunden und ich komme keinen deut weiter.
    Das programm war heute morgen um sieben schon genauso weit wie jetzt ich mittlerweile hab ich allen möglichen blödsinn ausprobiert und das programm ist mir bestimmt 80 mal abgestürzt!!!



  • switch (Auswahl)
    {
    ...
    case 1
    {
    ...
    } <<<------------------ das hier fehlt bei dir
    break;
    case 2
    ...
    }
    

    Wenn du mehr funktionen verwendest, wird das programm besser strukturiert.
    Daduch besser lessbar.



  • OK, dein Programm ist strukturell soweit o.k.
    Code::Blocks 8.02 schluckt alles ohne Fehler und Warnungen.

    Wie sieht es mit anderen Arten von Fehlern aus?
    Werden Arrays (fangen bei 0 an!) über Grenzen hinaus überschrieben?

    Manchmal hilft es, TRACE-Funktionen einzubauen oder zu Debuggen, damit man logische Fehler findet.

    ZeileSpalte[10][10] Reichen diese 10*10 wirklich aus? Wo wird die Begrenzung auf Elemente 0 ... 9 gecheckt? usw.

    Einfach mal alles um Faktor 10 erhöhen und schauen, ob der logische Fehler dann verschwindet.

    Variablen TRACEN.



  • Prüf mal welchen Wert die Variable "i" hat wenn die entsprechende Codezeile erreicht wird. Sie wird nirgendwo initialisiert.



  • merker schrieb:

    Prüf mal welchen Wert die Variable "i" hat wenn die entsprechende Codezeile erreicht wird. Sie wird nirgendwo initialisiert.

    Hi erst mal danke schön 🙂
    aber in zeile 55 wierd die initalisiert und eigentlich müsste dann ja auch der compieler eine fehler melden.



  • Stimmt, ca. Zeile 113: wird i ohne Initialisierung verwendet.
    Am besten in jedem Block vorher die Laufvariablen auf den gewünschten Wert setzen.



  • int AnzahlReihen, AnzahlSpalten, i, k, m, z;

    Meinst Du dies hier? Das ist kein Initialiseren.



  • Nina1980 schrieb:

    aber in zeile 55 wierd die initalisiert und eigentlich müsste dann ja auch der compieler eine fehler melden.

    In Zeile 55 wird sie deklariert (d.h. bekannt gemacht) aber nicht initialisiert (d.h. einen Wert zugewiesen bekommen).



  • hallo Nina1980,

    Du hasst eine geschweifte Klammer falsch gesetzt.
    Und die lokalen Variablen in case 1 sind dann in case 2 ungültig.

    switch (Auswahl)
    {
    ...
    case 1
    {
    ...
    } <<<------------------ das hier fehlt bei dir
    break;
    case 2
    ...
    }
    


  • Erhard Henkes schrieb:

    OK, dein Programm ist strukturell soweit o.k.
    Code::Blocks 8.02 schluckt alles ohne Fehler und Warnungen.

    Wie sieht es mit anderen Arten von Fehlern aus?
    Werden Arrays (fangen bei 0 an!) über Grenzen hinaus überschrieben?

    Manchmal hilft es, TRACE-Funktionen einzubauen oder zu Debuggen, damit man logische Fehler findet.

    ZeileSpalte[10][10] Reichen diese 10*10 wirklich aus? Wo wird die Begrenzung auf Elemente 0 ... 9 gecheckt? usw.

    Einfach mal alles um Faktor 10 erhöhen und schauen, ob der logische Fehler dann verschwindet.

    Variablen TRACEN.

    Ja auch dank schjön ich weiss jetzt garnicht was Trace heißt *schäm* aber ich werd mal schauen.
    eigentlich dürfte es mit dem ersten programm abschnitt nichts zu tuhn haben weil das programm immer dann abstürzt wenn ich in der strucktur die 3 variable nicht auskommentiert habe und ich das 2 programm also die dreiecks darstellung aufrufe ansonsten läut das aber ich werd mal schauen.

    Liebe grüße
    nina



  • merker schrieb:

    Nina1980 schrieb:

    aber in zeile 55 wierd die initalisiert und eigentlich müsste dann ja auch der compieler eine fehler melden.

    In Zeile 55 wird sie deklariert (d.h. bekannt gemacht) aber nicht initialisiert (d.h. einen Wert zugewiesen bekommen).

    ohh sorry ähhm reicht das nicht im kopf der schleifen zeile 74 90 und 106 ????



  • Ramsis schrieb:

    hallo Nina1980,

    Du hasst eine geschweifte Klammer falsch gesetzt.
    Und die lokalen Variablen in case 1 sind dann in case 2 ungültig.

    switch (Auswahl)
    {
    ...
    case 1
    {
    ...
    } <<<------------------ das hier fehlt bei dir
    break;
    case 2
    ...
    }
    

    Ja danke schön 🙂 Freu
    das wars ich musste di klammer setzen am ende eine weg nehmen und in case 2
    i nochmal mit 0 initialisieren.

    🙂 🙂 🙂 🙂 👍 👍



  • Als Abschluss kannst Du Dein korrektes Programm mit sauberem strukturellen Aufbau (Konsequente Einrückungen, die man vertikal verfolgen kann; Kommentare an den schließenden Klammern; Strukturen schaffen durch Funktionen) als Positivbeispiel darstellen.

    Bsp.:

    switch ( expression )
     {
      //Zweig 1
      case 'a':
      case 'A':
        if ( i > 0 )
        {
           a = b;
           c = d;
        }//if
        else
        {
           a = b + 1;
           c = d + 1;
        }//else
      break;//Zweig 1
    
      //Zweig 2
      case 'b':
      case 'B':
        do
        {
           //blabla
           //blabla
        }while( x == 0 && y != NULL && z != blubb );
      break;//Zweig 2
    
      //Zweig 3
      case 'c':
      case 'C':
        statement_c;
      break;//Zweig 3
    
      default:
        statement_default;
     }//switch
    

Anmelden zum Antworten