2017-07-29 1 views
3

Ich mache ein Programm, um gerade und ungerade Ganzzahlen aus einem Array zu trennen. Ich gab den geraden und ungeraden Feldern 3 Elemente, aber wenn es keine 3 geraden/ungeraden ganzen Zahlen gibt, druckt es einige Zufallszahlen aus. Gibt es eine Möglichkeit zu definieren, was ausgedruckt werden soll. Hier ist der Code, falls benötigt:Wie weniger Elemente als in einem Array angezeigt werden

P.S. Ich habe die Lösung des Problems gefunden, aber es hat einen anderen Ansatz, also möchte ich nur wissen, dass ich es auf diese Weise hätte machen können und wenn nicht, warum? Vielen Dank!

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <string.h> 
#include <math.h> 
#include <time.h> 

int main() 
{ 
    int nubmers[3]; 
    int even[3]; 
    int odd[3]; 

    for(int i = 0; i < 3; i++) 
    { 
     printf("Enter %d element : ", i); 
     scanf(" %d", &numbers[i]); 

     if(numbers[0]%2 == 0) 
     { 
      even[0] = numbers[0]; 
     } 
     else 
     { 
      odd[0] = numbers[0]; 
     } 

     if(nubmers[1]%2 == 0) 
     { 
      even[1] = numbers[1]; 
     } 
     else 
     { 
      odd[1] = numbers[1]; 
     } 

     if(numbers[2]%2 == 0) 
     { 
      even[2] = numbers[2]; 
     } 
     else 
     { 
      odd[2] = numbers[2]; 
     } 
    } 

    printf("Even : %d\n", even[i]); 
    printf("Odd : %d\n", odd[i]); 

    return 0; 
} 
+2

Das ist jetzt, wie Sie Schleifen verwenden. Tipp: Sie füllen "gerade" und "ungerade" drei Mal anstelle von einem. – CinCout

+0

ja ich habe das im code aber nicht in frage dank thanks –

+0

@CinCout sorry ich verstehe nicht ganz Ihren kommentar was muss ich tun machen eine if-aussage mit even und sonst mit ungerade oder –

Antwort

2

Innerhalb der Schleife sollten Sie die Schleife Zählvariable i verwenden und nicht die festen Indizes 0, 1 und 2.

Weiterhin sollten Sie die Anzahl der geraden und die Anzahl der ungeraden Werte zählen.

Schließlich können Sie eine Liste der geraden Werte und eine Liste der ungeraden Werte ausdrucken.

int main() 
{ 
    int nubmers[3]; 
    int even[3]; 
    int odd[3]; 
    int noEven = 0, noOdd = 0; 

    for(int i = 0; i < 3; i++) 
    { 
     printf("Enter %d element : ", i); 
     scanf(" %d", &numbers[i]); 

     if (numbers[i]%2 == 0) 
      even[noEven++] = numbers[i]; 
     else 
      odd[noOdd++] = numbers[i]; 
    } 

    for(int i = 0; i < noEven; i++) 
     printf("Even : %d\n", even[i]); 
    for(int i = 0; i < noOdd; i++) 
     printf("Odd : %d\n", odd[i]); 

    return 0; 
} 
+1

Nizza. Warum machen Sie es nicht noch netter, indem Sie den Even-/Odd-Counter und das zugehörige Array jeweils in eine "struct" einbetten und damit noch schöner machen? ;) – alk

1

Wie weniger Elemente angezeigt werden, als in einem Array dort

jeden "Not-In-Use"

Wert definieren und die Arrays mit diesem initialisieren.

Ein "Nicht verwendeter" Wert sollte ein Wert sein, von dem Sie sicher wissen, dass er während des Programmlaufs nicht benötigt/verwendet wird.

In Ihrem Fall könnten Sie zum Beispiel die kleinste int möglich, die als INT_MIN definiert ist.

#include <stdio.h> 
#include <limits.h> /* for INT_MIN */ 

#define NOT_IN_USE INT_MIN 


int main(void) 
{ 
    ... 

    for (size_t i = 0; i < 3;: ++i) 
    { 
    numbers[i] = NOT_IN_USE; 
    even[i] = NOT_IN_USE; 
    odd[i] = NOT_IN_USE; 
    } 

Stellen Sie sicher, die „Nicht-In-Use“ Wert wird auf jeden Fall nicht verwendet:

/* core program code here */ 
for(int i = 0; i < 3; i++) 
{ 
    printf("Enter %d element : ", i); 
    scanf(" %d", &numbers[i]); 
    if (NOT_IN_USE == numbers[i]) 
    { 
    printf("Invalid input. Try again.\n"); 
    --i; 
    continue; 
    } 

Wenn Sie dann wollen später nur die Elemente untersuchen, die verwendet worden waren/berührt nur eine Schleife über Das Array überspringt alle Elemente, die dem Wert "Nicht verwendet" entsprechen.

/* Show results */ 
    for (size_t i = 0; i < 3;: ++i) 
    { 
    if (NOT_IN_USE != numbers[i]) 
    { 
     printf("number[%zu] = %d\n", i, number[i]); 
    } 

    if (NOT_IN_USE != even[i]) 
    { 
     printf("even[%zu] = %d\n", i, even[i]); 
    } 

    if (NOT_IN_USE != odd[i]) 
    { 
     printf("odd[%zu] = %d\n", i, odd[i]); 
    } 
    } 
} 
+0

Aus Neugier, warum benutzt du '<>' für '! ='? –

+1

Wuah ... - in letzter Zeit zu viel Pascal ... - behoben:} – alk

+0

@ Jean-FrançoisFabre: Um ehrlich zu sein, es war nicht Pascal sondern VBA ...;} – alk

Verwandte Themen