2017-02-06 2 views
0

Ich habe studiert C++ für 3 Monate, und ich studierte die Arrays, ich schrieb ein Programm, das Eingaben vom Benutzer, dann wird das Programm diese Zahlen in einem speziellen Array, dann das Programm speichern werde sie in zwei Felder teilen, eins für gerade Zahlen, das andere für ungerade Zahlen, meine Frage ist, als ich versucht habe, sie anzuzeigen, da ist etwas falsches passiert, aber ich konnte es nicht herausfinden, kannst du mir bitte helfen?über Arrays in C++

int main() { 
    int even[5]; 
    int odd[5]; 
    int num; 

    cout << "enter 4 numbers!"; 
    for(int i=0; i<4; i++) { 
     cin >> num; 
     if(num%2 == 0){ 
      cout << "its an even number!"; 
      even[i] += num; 
     } 
     else{ 
      cout << "its an odd number!"; 
      odd[i] += num; 
     } 
    } 
    cout << "The odd number/s is/are: "; 
    for(int u=0; u<4; u++){ 
     cout << odd[u] << endl; 
    } 

    cout << endl; 
    cout << "The even number/s is/are: " << endl; 
    for(int z=0; z<4; z++){ 
     cout << even[z] << endl; 
    } 
} 

Vielen Dank für Ihre Hilfe!

+0

Zuerst nehmen Sie verschiedene Variable für den Index in geraden und ungeraden Array.Zeit verwenden Sie i für beide Array.Suche erste Zahl ist gerade und scond ist ungerade Sie wollen diese ungerade Zahl an Index 0 in ungerade, aber derzeit wird es sein bei Index 1. – user1438832

+0

Sie verwenden '+ =' auf eine nicht initialisierte Variable –

Antwort

2

Aus Ihrer Frage, es sieht so aus, als ob Sie versuchen, ein gegebenes Integer-Array in zwei gerade und ungerade Arrays aufzuteilen. Das Problem hier ist die Art und Weise, wie Sie die Werte den neuen Arrays zuweisen. Sie haben einen Zähler i, der dafür verantwortlich ist, die Werte in even[i] und odd[i] zu setzen. Sie haben also viele defekte Sektionen, selbst wenn [0] existiert, aber die ungerade [1] könnte der erste ungerade Wert sein, den Sie erhalten. Sie sollten individuelle Zähler zum Speichern dieser Werte haben. So sind die Korrekturen an Ihrem Code aussehen würde wie

folgt
int main() { 
    int even[5]; 
    int odd[5]; 
    int num; 
    int evencount = 0; 
    int oddcount = 0; 

    cout << "enter 4 numbers!"; 
    for(int i=0; i<4; i++) { 
     cin >> num; 
     if(num%2 == 0){ 
      cout << "its an even number!"; 
      even[evencount++] = num; 
     } 
     else{ 
      cout << "its an odd number!"; 
      odd[oddcount++] = num; 
     } 
    } 
    cout << "The odd number/s is/are: "; 
    for(int u=0; u < oddcount; u++){ 
     cout << odd[u] << endl; 
    } 

    cout << endl; 
    cout << "The even number/s is/are: " << endl; 
    for(int z=0; z<evencount; z++){ 
     cout << even[z] << endl; 
    } 
} 
+0

@MajdNabeel Es sieht aus wie diese Antwort Ihr Problem gelöst. Sie sollten es als die akzeptierte Lösung markieren. – user4581301

+0

Größe von 'even' und' odd' muss nicht 5 sein, 4 sollte ausreichen, da es nur 4 Zahlen akzeptiert. – Rishi

0

Ich habe einen etwas anderen Ansatz:

#include <iostream> 
using namespace std; 

int main() { 
    int array[4]; // array size needs to be 4 only and not 5 
    /*int num;*/ // not required 
    bool is_odd[4] = {false, false, false, false}; 


    cout << "enter 4 numbers!\n"; 
    for(int i=0; i<4; i++) { 
     cin >> array[i]; 
     if(array[i]%2 == 0){ 
      cout << "its an even number!\n"; 
     } 
     else{ 
      cout << "its an odd number!\n"; 
      is_odd[i] = true; 
     } 
    } 
    cout << "The odd number/s is/are:\n"; 
    for(int u=0; u < 4; u++){ 
     if (is_odd[u] == true) 
      cout << array[u] << endl; 
    } 

    cout << endl; 
    cout << "The even number/s is/are:\n" << endl; 
    for(int u=0; u < 4; u++) { 
     if (is_odd[u] == false) 
      cout << array[u] << endl; 
    } 
} 

Überprüfen Sie die Antwort hier: check-answer

+0

warum nicht 'bool isOdd [4] = {false}' für die Klarheit? – Caleth

+0

@Caleth, Ja, wir können das tun. – Rishi

+1

@Caleth Weil es keine Klarheit bringt, fügt es Verwirrung hinzu. Verwenden Sie entweder 'bool isOdd [4] = {}', um das gesamte Array implizit mit 'false' oder' bool isOdd [4] = {false, false, false, false} zu initialisieren; 'um das Array explizit zu initialisieren. Im Moment haben die Leute den Eindruck, dass 'bool isOdd [4] = {true};' das Array mit allen 'true' initialisiert, was nicht der Fall ist. – nwp

0

Sie Zugriff Werte des Arrays, die deklariert werden aber nicht initialisiert. Es sind also irgendwelche Werte drin. wie 6.49e154. Beim Deklarieren immer initialisieren!