2017-02-09 3 views
-4

In Strings können wir den letzten String dank "\ 0" kennen, aber wie kann ich die nächste freie Position eines Arrays erkennen? Hier habe ich den Code:Wie kann man die nächste freie Position des Arrays kennen?

#include <stdio.h> 

int main(){ 
    int notes[10]; 
    int i, usuari; 

    printf("Put a number"); 
    scanf("%i", &usuari); 

    for (i=0;i<usuari;i++){ 
     scanf("%i", &notes[i]); 
    } 
} 

Benutzer geben eine Zahl (Variable usuari). Woher weiß ich, dass die vom Benutzer angegebenen Positionen neben der Nummer frei sind? Und wie kann ich sie drucken?

+5

Ein Array hat keine "freie Position". C hat keinen String-Typ. Es ist alles Konvention, wie Arrays verwendet werden. Denk darüber nach! – Olaf

+0

Also, wie könnte ich die freien Positionen neben der Nummer drucken, wo das Array endet? – Abdullah

+0

Definieren Sie das Wort "frei"? – Sabrina

Antwort

1

Normalerweise würden Sie Ihr Array auf einen Wert initialisieren, der nie eingegeben würde, z. B. -1. So können Sie Notizen wie folgt definieren:

Dann können Sie überprüfen, ob Noten [i] == -1, bevor Sie es verwenden. Aber ich rate nur, was Sie unter unused verstehen.

EDIT:

Wie oben darauf hingewiesen, das nur das erste Element initialisiert. Sie müßten eigentlich Notizen wie diese initialisieren:

int notes[10] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}; 

Oder in einer Schleife

+1

Beachten Sie, dass nur 'notes [0]' auf '-1' initialisiert wird. Eine der rätselhafteren Versäumnisse bei den C99-Verbesserungen an Initialisierern war die Fähigkeit, einen Wert einige Male in Initialisierern zu wiederholen. Es ist doppelt seltsam, seit Fortran es für immer hat (seit Fortran 66 sowieso). –

+0

Das stimmt. Sie müssen es folgendermaßen initialisieren: 'int notiert [10] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,};' – bruceg

0

Entweder einen Terminalwert verwenden, ähnlich wie Strings in C einen Endwert verwenden Sie das Ende, um anzuzeigen, ... oder speichern die Position des nächsten Werts, ähnlich wie Ihre Schleife weiß, wo der nächste Wert gespeichert werden soll.

Angenommen, Sie Ihre Initialisierung von i außerhalb der Schleife bewegen und Ihre Benutzereingabe in eine verschachtelte Schleife wickeln etwa so:

#include <stdio.h> 

int main(){ 
    int notes[10]; 
    int i = 0, usuari; 

    for (;;) { 
     printf("Put a number"); 
     scanf("%i", &usuari); 

     for (;i<usuari;i++){ 
      scanf("%i", &notes[i]); 
     } 
    } 
} 

Wie wirkt sich die am weitesten innen Schleife wissen, wo der nächste Wert speichern? Die Position wird natürlich für die Dauer der Lebensdauer der Variablen gespeichert und inkrementiert. Sie speichern die Länge, ja?

Verwandte Themen