whileschleifen-Problem



  • Hi, eigenlich recht einfache Aufgabe, dachte ich mir, ich möchte in einem Integerarray solange den Inhalt verändern bis ich auf eine Null treffe, aber irgendwie wird immer die letzte Stelle nicht verändert, kann mir bitte jemand sagen warum?

    [code="c"]
    int *a;
    int b,c=0, d=0;

    a=&m_in[0];

    for(b=0;b<5;b++){

    *a=(c++)+1;

    a++;

    }

    a=&m_in[0];

    while(m_in[*a]>1){
    *a=*a+10000;
    a=a+1;
    }



  • int *a;
    	int b,c=0, d=0;
    
    	a=&m_in[0];
    
    	for(b=0;b<5;b++){
    
    	*a=(c++)+1;
    
    	a++;
    
    	}
    
    	a=&m_in[0];
    
    	while(m_in[*a]>1){
    		*a=*a+10000;
    		a=a+1;
    	}
    

  • Mod

    Da sind wahrscheinlich noch mehr Fehler drin (bitte Originalcode zeigen!), aber x > 1 ist zumindest schon einmal nicht das gleiche wie x != 0.

    edit: Nein, da sind noch mehr Fehler drin! Und was für welche! Das sollte eigentlich vollkommen abstürzen, sofern es überhaupt compiliert. Siehe dritter Link in meiner Signatur.



  • mehr ist nicht vorhanden, ich habe versucht mit Pointern zu arbeiten.

    int bla(void){
    
    	int m_in[100]={'0'};
    	int *a;
    	int b,c=0, d=0;
    
    	a=&m_in[0];
    
    	for(b=0;b<5;b++){
    
    	*a=(c++)+1;
    
    	a++;
    
    	}
    
    	a=&m_in[0];
    
    	while(m_in[*a]>1){
    		*a=*a+10000;
    		a=a+1;
    	}
    

  • Mod

    hmm... schrieb:

    mehr ist nicht vorhanden,

    So? wie stellst du dann überhaupt fest, dass da ein Fehler ist?

    ich habe versucht mit Pointern zu arbeiten.

    Tut mir leid, aber da sind in fast jeder Zeile schwerste Fehler. Wie soll man da helfen? Du scheinst die Grundlagen der Sprachen nicht zu beherrschen und bloß der Zufall (oder wildes Ausprobieren?) macht, dass das Programm überhaupt übersetzbar ist. Wie willst du da eine Antwort verstehen? Du musst dringend nochmal die Grundlagen nachholen.



  • Ich kann mir die Variablen anschauen, während ich Schritt für Schritt durchgehe 👍

    So sehe ich, dass bis m_in[3] 10000 hinzuaddiert werden und dann die SChleife abbricht

    int portstructadjustment(void){
    
    	int m_in[100]={1,2,3,4,5,0};
    	int *a;
    	int b,c=0, d=0;
    
    	a=&m_in[0]; <- Pointer zeigt auf erstes Element von m_in
    
    	while(m_in[*a]!=0){  <- solange wiederholen bis Inhalt von Zeiger nicht Null 
    		*a=*a+10000; <- Dem Inhalt von Zeiger a 10000 hinzuaddieren
    		a=a+1; <- Zeiger um eine Stelle verrücken
    	}
    return 0;
    }
    

  • Mod

    Das ist ja wieder ein ganz anderer Quellcode. Einer der wichtigsten Fehler besteht aber weiterhin:

    while(m_in[*a]!=0){  <- solange wiederholen bis Inhalt von Zeiger nicht Null
    

    Nein, das heißt ganz was anderes. Da steht: So lange das Feld m_in an der Stelle *a (also die Stelle mit der Nummer, auf die a zeigt) ungleich 0 ist.



  • ok das ist falsch, es hätte nur while(*a!=0){ heißen müssen, da ich den Inhalt des Zeigers vergleichen möchte und nicht das Element des Arrays


Anmelden zum Antworten