2016-08-04 24 views
0

Ich beginne in der C-Programmierung und mein Englisch ist nicht die beste zu entfernen, ich werde also versuchen, mir die besten zu erklären, ich kann ...Wie Speicher Richtungen von einem leeren Vektor

Ich habe versucht, zu sie ein Programm, das Zufallszahlen, Paare und ungerade Zahlen und speichert diese Zahlen in zwei verschiedenen Vektoren ...

So erzeugt es wie dieses

#include <stdio.h> 
#include <stdlib.h> 
#define ARRAYSIZE 6 

void main() 
{ 
    int randomNumber, position, pairVector[ARRAYSIZE], oddVector[ARRAYSIZE]; 
    srand(time(NULL)); 

    for (position = 0; position < ARRAYSIZE; position++) 
    { 
     randomNumber = rand() % 49 + 0; 
     if (randomNumber % 2 == 0) 
      pairVector[position] = randomNumber; 
     else 
      oddVector[position] = randomNumber; 
    } 

    // Loop to print all the pair random numbers 
    for (position = 0; position < ARRAYSIZE; position++) 
    { 
     if(pairVector[position] >= 0) 
      printf("%d ", pairVector[position]); 
    } 
    // Separation of the pair and odd numbers 
    printf("\n\n\n"); 

    // Loop to print all the odd random numbers 
    for (position = 0; position < ARRAYSIZE; position++) 
    { 
     if (oddVector[position] >= 0) 
      printf("%d ", oddVector[position]); 
    } 
} 

sieht aus, als u sehen kann, ich habe 2 Schlaufen Drucken Sie Paare und ungerade Zahlen, diese Zahlen sind mit 2 Schleifen gedruckt, so geht hier meine Frage ...

Ohne die Bedingung> = 0 im Vektor innerhalb der Schleife, habe ich einige Speicherrichtungen ausgedruckt (denn wenn ich eine Größe von 6 Ints, aber nur 3 Zahlen (Paar oder Ungerade) habe, werden auch die anderen 3 Richtungen gedruckt)) ... Was kann ich tun, um diese Anweisungen aus dem gedruckten Vektor ohne die Bedingung zu entfernen? Vielleicht Zeiger?

Danke in Beratung und Entschuldigung für mein schlechtes Englisch.

+0

Ein Beispiel von dem, was, wenn die Bedingungen ... Ausgang zu sprechen, ohne im: 28 24 32 48 42 -858993460 (dies wäre das Paar Vektor) -858993460 -858993460 -858993460 -858993460 -858993460 17 (Diese wäre der ungerade Vektor) Ich möchte die Speicherrichtung "-858993460" entfernen. –

+0

Das richtige Wort für 'Paar' wäre' even'. –

+0

Initialisieren Sie die Arrays mit "ungültigen" Zahlen (> 48), da Ihre Zufallszahl niemals einen Wert größer als 48 annimmt. So können Sie die ungültigen Einträge erkennen. Du wirst sowieso eine Bedingung brauchen. Oder Sie benötigen eine völlig andere, wahrscheinlich dynamische Datenstruktur. Alternativ können Sie einen Offset entweder zu geraden oder ungeraden Einträgen im Array * self * hinzufügen. Wenn Sie zum Beispiel "50" zu geraden Zahlen hinzufügen, können Sie immer feststellen, dass der Eintrag gerade ist, und dann 50 subtrahieren, um den Wert wiederherzustellen. –

Antwort

0

Aufgrund der Tatsache, dass Sie nicht wissen, wann die Arrays vollständig gefüllt werden, empfehle ich Ihnen, eine while-Schleife zu machen, bis beide Arrays gefüllt sind.

void main() 
{ 
int randomNumber, position, pairVector[ARRAYSIZE], oddVector[ARRAYSIZE]; 
srand(time(NULL)); 
int pairIndex, oddIndex; 
pairIndex = oddIndex = 0; // you will increment them once you find a number for regarding array 

while ((pairIndex < ARRAYSIZE) || (oddIndex < ARRAYSIZE)) 
{ 
    randomNumber = rand() % 49 + 0; 
    if (randomNumber % 2 == 0){ 
     if (pairIndex<ARRAYSIZE) 
      pairVector[pairIndex++] = randomNumber; 
    } 
    else{ 
     if (oddIndex<ARRAYSIZE) 
      oddVector[oddIndex++] = randomNumber; 
    } 
} 

// Loop to print all the pair random numbers 
for (position = 0; position < ARRAYSIZE; position++) 
{ 
    if(pairVector[position] >= 0) 
     printf("%d ", pairVector[position]); 
} 
// Separation of the pair and odd numbers 
printf("\n\n\n"); 

// Loop to print all the odd random numbers 
for (position = 0; position < ARRAYSIZE; position++) 
{ 
    if (oddVector[position] >= 0) 
     printf("%d ", oddVector[position]); 
} 
} 

In Ihrem Ansatz wurde die Schleife nur 6 Mal durchlaufen und sicher eine oder beide Arrays unvollständig sein. In der obigen Lösung füllen Sie beide Arrays und dann drucken Sie sie aus.

+0

Vielen Dank alle Jungs, also wieder aufnehmen, während der Programmierung kann man nicht "erkennen", wenn es eine Speicherrichtung gibt und diese Position nicht richtig drucken? U muss beide Arrays auf einen beliebigen Wert initialisiert werden, so dass diese Werte diejenigen sind, die wir "erkennen" und nicht drucken müssen ... Danke euch allen. –

1

Sie können die beiden Arrays Elemente festgelegt auf 0

for(position = 0; position < ARRAYSIZE; position++) 
    pairVector[position] = 0; 

tun es für die beiden Arrays und Ihre Arrays mit 0 (Nullen), neben füllen Sie Ihre Arrays mit rand Zahlen gefüllt werden, so werden Sie haben so etwas wie

Beispiel: 24, 22, 58, 0, 0, 0

, wenn Sie Array auszudrucken wollen, gehen Sie einfach so etwas wie

for(position = 0; position < ARRAYSIZE; position++) 
{ 
    if(pairVector[position] != 0) 
     printf("%d ", pairVector[position]); 
}