programm gibt komische zeichen als ausgabe



  • hallo

    hab hier ein programm geschrieben, welches 2 arrays liest und diese zu einem neuen array macht aber ohne die Zeichen zu wiederholen. in diesem fall sind es Buchstaben
    also z.B. A[6]=A B J D E F
    B[5}=B I E F G

    als ergebnis muss ich das hier bekommen
    hier weiß ich nicht, welche zahl ich in array eingeben muss. hab mir aber gedacht die zahl 11 wäre richtig
    C [11] =A B J D E F I G

    hier mein programm

    # include <iostream.h> // ich weiß hier muss es iostream heißen ohne .h
    void main () /* hier muss es auch int main heißen aber von mir wird es halt so verlangt. da kann ich nichts machen. hab dem lehrer das schon mal gesagt, aber hab nur eine unverschämte antwort von dem bekommen. ^^ */
    {
    	char A[6];
    	char B[5];
    	int  t=0;
        char C[11];
        int counter=0;
    
    	for (int i=0;i<6;i++)
    		cin>>A[i];
    	for (i=0;i<5;i++)
    		cin>>B[i];
    
    	for (i=0;i<4;i++)
    	{ for (int j=0;j<6;j++)
    
    	{
    		if (B[i]==A[j])
    			counter++;}
    	if (counter==0)
    	{C[t]=B[i];
    	t++;
    	counter=0;}
    	}
    	for (i=0;i<6;i++)
    		cout << A[i];
    	for (i=0;i<=t;i++)
    		cout <<C[i];
    }
    

    in diesem bild befindet sich der fehler

    http://s14.directupload.net/file/d/2912/ldopzrgh_png.htm

    vilen dank für eure antworten



  • Kompiliert bei mir nicht: fatal error C1083: Datei (Include) kann nicht geöffnet werden: "iostream.h": No such file or directory. Sowas würde ich Deinem Lehrer dann man an den Kopf knallen.



  • Der Fehler liegt in Zeile 15. Mach ne 5 draus, dann sollte es gehen.

    Jedoch lernst du Mist, Tachyon hats schon angesprochen.

    gruß
    syntax



  • Ausserdem muss das counter=0; aus der if-Bedingung raus.

    P.S.: welchen Compiler verwendet ihr eigentlich?



  • __cu schrieb:

    Ausserdem muss das counter=0; aus der if-Bedingung raus.

    P.S.: welchen Compiler verwendet ihr eigentlich?

    Bei dem, was man so von Schulen mitbekommt, ist das bestimmt entweder Dev-C++ mit dem dazugehörenden uralt-Compiler oder eine Raubkopie von VS6.



  • Und außerdem:

    #include <iostream.h>, void main(), using namespace std fehlt( oder direkt gleich std::cin, std::cout), Stilistisch nicht schön(Einrückung und Klammern),...

    Wo wird dir das unterrichtet? UNI?

    gruß
    syntax


  • Mod

    Bei der Ausgabe muss es auch noch i < t heißen, nicht i <= t . Mit diesen drei Fehlern (Zeilen 15, 24 und 28) ist es dann (für deinen Compiler) richtig.

    Ist eigentlich noch niemandem aufgefallen, was hier mit dem i getrieben wird? Gültigkeitsbereich? Das ist auch so etwas, was kein Nach-2000-Compiler mehr schlucken wird.



  • SeppJ schrieb:

    Ist eigentlich noch niemandem aufgefallen, was hier mit dem i getrieben wird? Gültigkeitsbereich? Das ist auch so etwas, was kein Nach-2000-Compiler mehr schlucken wird.

    👍
    Habs gesehen, aber durch die Fehlerüberhäufung vergessen aufzuzählen. 🙂

    gruß
    syntax



  • vielen dank erstmal für eure antworten
    also zu den compiler.. ich benutze microsoft visual c++ 6.0
    hatte mir glaub ich das vs10 geholt und ihr habt recht. das vs10 konnte keines dieser programme "verstehen"

    hab die zeilen (15 24 28) verändert. wenn ich aber die zeile 28 verändere, dann wird der befehl von zeile 28-29 nicht ausgeführt. bekomme dann nur das A[6] array
    also das hier (A B C D E F)

    die komischen zeichen sind immer noch da 😕

    noch ein paar ideen?


  • Mod

    Zeig mal den Code nach der Änderung.



  • # include <iostream.h>
    void main ()
    {
    	char A[6];
    	char B[5];
    	int  t=0;
        char C[11];
        int counter=0;
    
    	for (int i=0;i<6;i++)
    		cin>>A[i];
    	for (i=0;i<5;i++)
    		cin>>B[i];
    
    	for (i=0;i<5;i++)
    	{ for (int j=0;j<6;j++)
    
    	{
    		if (B[i]==A[j])
    			counter++;}
    	if (counter==0)
    	{C[t]=B[i];
    	t++;
    	}
    	}
    	for (i=0;i<6;i++)
    		cout << A[i];
    	for (i=0;i<t;i++) // wenn ich hier aber das = weggmache, wird diese schleife ignoriert
    		cout <<C[i];
    }
    

  • Mod

    In Zeile 24 solltest du das Rücksetzen des counters außerhalb des if-Blocks ziehen, nicht komplett entfernen. In Zeile 28 solltest du aus dem <= ein < machen, nicht das = entfernen. Antworten bitte genau lesen.



  • tut mir leid. hab zu schnell gelesen

    ist das jetzt so richtig?

    # include <iostream.h>
    void main ()
    {
    	char A[6];
    	char B[5];
    	int  t=0;
        char C[11];
        int counter=0;
    
    	for (int i=0;i<6;i++)
    		cin>>A[i];
    	for (i=0;i<5;i++)
    		cin>>B[i];
    
    	for (i=0;i<5;i++)
    	{ for (int j=0;j<6;j++)
    
    	{
    		if (B[i]==A[j])
    			counter++;}
    	if (counter==0)
    	{C[t]=B[i];
    	t++;
    	}
    	counter=0;
    	}
    	for (i=0;i<6;i++)
    		cout << A[i];
    	for (i=0;i<t;i++)
    		cout<<C[i];
    }
    

    das problem ist aber immer noch da



  • Du hast da was nicht mit dem GÜLTIGKEITSBEREICH einer Variablen verstanden.

    Es fehlt in jeder Schleife eine DEFINITION einer neuen Variablen, da die Variable in der ersten Schleife seinen Gültigkeitsbereich verlässt(dies ist die einzige Variable "i", die du DEFINIERST.

    Abhilfe: Organisier deinen Code besser, indem du IMMER Klammern setzt und diese auch SINNVOLL setzt und deine EINRÜCKUNG immer gleich machst.

    gruß
    syntax


  • Mod

    Es sieht auf den ersten Blick richtig (im Sinne deines Uraltcompilers) aus, ist bei deiner Einrückung schwer zu sehen. Funktioniert es denn?



  • Ich weiß nicht inwiefern du Gültigkeitsbereiche gelernt hast, aber sie sind durchaus wichtig für die Organisation eines Codes.
    Beispiel:

    void foo()
    {
    	int i=10;					//lokale Variable
    	{
    
    		int i=20;				//lokalere Variable
    		std::cout<<i;			 //hier wird 20 ausgegeben
    
    	}//hier verlässt das lokalere i den güligkeitsbereich
    
    	std::cout<<i;				 //hier wird 10 ausgegeben
    
    }//ab hier existiert kein i mehr
    
    std::cout<<i;			//Autsch!
    

    Dein Code:

    for (int i=0;i<6;i++)            // neue Schleifenvar. i
            cin>>A[i];
        for (i=0;i<5;i++)                // hier fehlt das int
            cin>>B[i];
    

    Vielleicht klarer warum Klammern wichtig für den Anfang sind? 🙂

    gruß
    syntax



  • vom Gültigkeitsbereiche habe ich noch nie was gehört und um ehrlich zu sein, habe ich es nicht so ganz verstanden.
    mir ist dieses problem noch nie vorgekommen obwohl ich mal ein programm geschrieben habe, wo ich eine (5x5 matrix die summe jeder reihe und jeden block ausrechnen muss) da habe ich 3 for schleifen die nur int i und int j beinhalten.aber es hatte ohne probleme geklappt. werde es in meinem nächsten post zeigen.

    hab das jetzt so gemacht sieht zwar voll dumm aus aber es funktioniert endlich.

    # include <iostream.h>
    void main ()
    {
    	char A[6];
    	char B[5];
    	int  t=0;
        char C[11];
        int counter=0;
    
    	for (int i=0;i<6;i++)
    		cin>>A[i];
    	for (int k=0;k<5;k++)
    		cin>>B[k];
    
    	for (int h=0;h<5;h++)
    	{ for (int l=0;l<6;l++)
    
    	{
    		if (B[h]==A[l])
    			counter++;}
    	if (counter==0)
    	{C[t]=B[h];
    	t++;
    	}
    	counter=0;
    	}
    	for (int p=0;p<6;p++)
    		cout << A[p];
    	for (int w=0;w<t;w++)
    		cout<<C[w];
    }
    

    vielen dank für eure hilfe



  • hier das 5x5 matrix das ich gerade erwähnt habe
    ( falss es jemanden interessiert ^^)

    # include <iostream.h>
    void main ()
    {
    	int A[5][5];
    	int sum=0;
    
    	for (int i=0;i<5;i++)
    		for (int j=0;j<5;j++)
    			cin>> A[i][j];
    
    		for ( i=0;i<5;i++) // warum bekomme ich hier den fehler error C2374: 'i' : redefinition; multiple initialization
    		{	for (int j=0;j<5;j++) // aber hier nicht
    				sum=sum+A[i][j];
    		        cout<<sum;
    				sum=0;}
    
    		for (int j=0;j<5;j++) // genauso hier auch nicht 
    		{   	for (int i=0;i<5;i++) // in zeile 11 habe ich den fehler bekommen aber hier nicht. kann mir das jemand erklären?
    				sum=sum+A[i][j];
    		        cout<<sum;
    				sum=0;}
    }
    

  • Mod

    Ich behaupte mal: Compilerfehler. Ist, wie du hoffentlich gemerkt hast, nicht der einzige 🙂

    Dein Matrizenprogramm ist übrigens ein Musterbeispiel für sinnentstellende Einrückung. Hast du keinen Editor der für dich automatisch einrückt? Ach nein! Du benutzt ja die Technik von vorvorvorgestern.



  • peter16 schrieb:

    warum bekomme ich hier den fehler error C2374

    Nach Zeile neun sind i und j Geschichte, in Zeile elf willst Du aber trotzdem ein i benutzen.

    Wenn hier Leute auf deiner Einrückung herumreiten ist das keine Pedanterie, sondern ein wirklich guter Rat.

    Wenn Du deinen Code ordentlich einrückst (und auch auf deine Klammern achtest) dann springen einem solche Fehler geradezu ins Gesicht.


Anmelden zum Antworten