array zu array kopieren



  • Hallo,

    könntet ihr euch folgenden Code mal anschauen? Ich bekomme am Ende bei der Ausgabe neben den gewünschten Zahlen noch zusätzliche Werte. Wie werde ich die los?

    #include "stdafx.h"
    #include "conio.h"
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int t[20], i=0, db=0;
    	int g[20], u[20], j=0, k=0;
    	do
    	{
    		printf("\nZahl:");
    		scanf_s("%i", &t[i]);
    		i++;
    	}
    	while (t[i-1]>9 && i<20);
    	db=i;
    	i=0;
    
    	printf("\n%i Zahlen wurden eingegeben." ,db);
    
    	for (i=0; i<db; i++)
    		{
    			if (t[i]%2==0 && i<db)
    				{ 
    					g[j++]=t[i];
    				}
    
    		}
    		i=0;
    
    	for (i=0; i<db; i++)
    		{
    			if (t[i]%2!=0 && i<db)
    				{ 
    					u[k++]=t[i];
    
    				}
    
    		}
    	printf("\nGerade Zahlen:");
    	for (j=0; j<db; j++)
    	{
    			printf("\n %i", g[j]);
    	} 
    	printf("\nUngerade Zahlen:");
    	for (k=0; k<db; k++)
    	{
    			printf("\n %i", u[k]);
    	} 
    
    	_getch();
    	return 0;
    }
    

    edit durch SeppJ: Die Code-Tags fangen mit [cpp] an und hören mit [/cpp] auf, nicht umgekehrt.



  • Das hat mit C++ wenig zu tun und gehört aus meiner Sicht eigentlich ins WinAPI-Forum. Mods?



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum C (C89 und C99) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • schon mal den Debugger angeschmissen?


  • Mod

    Du gibst in beiden Fällen so viele Zahlen aus, wie insgesamt eingegeben wurden ( db ). Die Zahl der geraden bzw. ungeraden Zahlen ist aber in der Regel kleiner, das heißt du gibst hier mehr Werte aus, als überhaupt da sind.

    Da helfen übrigens ungemein sprechende Variablennamen. Hieße db stattdessen anzahl_eingegebener_zahlen, g gerade_zahlen und u ungerade_zahlen, dann wäre dir der Fehler gar nicht erst passiert. Eine Variable die mehr als bloß ein Zählindex ist (oder besser auch wenn sie ein Zählindex ist) sollte als Faustregel einen mehr als drei Buchstaben als Bezeichner haben. Die Schreibfaulheit kostet sonst nämlich mehr Zeit bei der Fehlersuche, als sie beim Tippen spart (und viele Editoren können Autovervollständigung!).



  • Ja ich weiß, dass die Variablenbezeichnugen eigentlich größer sein sollten. Eigentlich war das ganze nur als kleiner Test für eine größere Aufgabe gedacht und da war ich wirklich schreibfaul. Ich hatte aber gedacht, dass ich durch die "If" Befehle die neuen Arrays tatsächlich nur mit den vorgesehenen werten gefüllt habe. Wie kann ich das umgehen, dass mehr Werte ausgegeben werden?



  • jhycp schrieb:

    ..Wie kann ich das umgehen, dass mehr Werte ausgegeben werden?

    indem du für jedes array eine zählvariable nimmst und die anzahl im array speicherst 💡



  • Bei Zeile 40 hast du j gerade Zahlen und k ungerade Zahlen.

    Jetzt musst du nur bei der Ausgabe dein Zählvariablen und Grenze ändern.

    Ach und der Vergleich && i<db bei den if ist überflüssig.


Anmelden zum Antworten