programm gibt komische zeichen als ausgabe


  • 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.



  • // Main.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	char A[6];
        char B[5];
        char C[5];
    
    	int counter=0; // doppelt in A & B ( wenn counter > 0)
    	int t=0;       
    	int i, j;      // Laufvariablen 
    
    	for (i=0;i<6;i++)
            cin >> A[i];
    
    	for (i=0;i<5;i++)
            cin >> B[i];
    
        for (i=0;i<5;i++)
        { 
    		for (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];
    
    	cout << endl;
    
    }
    

    Du könntest noch in Zeile 27, nach counter ein break einfügen - da dich die Anzahl der Doppelten in B[] nicht wirklich interessiert.

    Ansonsten sollte deine Version funktionieren, wenn du die Sichbarkeit der Variablen beachtest.

    Gruss


Anmelden zum Antworten