2012-04-08 15 views
2

Ich versuche, Zahlen von stdin zu einem Array zu bekommen. Die erste Zahl in stdin ist die Anzahl der Elemente im Array (die Zahl kann ein beliebiges int sein). Ich tat dies die erste Zahl zu erhalten:Abrufen von Zahlen von stdin zu einem Array in C

while(c=getchar()!=' '){ 
n*=10; 
n+=atoi(c); 
} 

und erstellt dann ein Array der Größe n. Jetzt muss ich durch den ganzen Rest zu dem Array

while(c=getchar()!=EOF) 

und fügen Sie Nummern gehen. Die Zahlen sind getrennt durch \ t und manchmal auch \ n. Wie würde ich das tun? Ich habe eine Stunde nachgedacht und habe immer noch keinen funktionierenden Code. Irgendwelche Hilfe? Danke!

Antwort

2

Wenn Sie nicht gerade besonders masochistisch Gefühl (oder kann zu Hausaufgaben Anforderungen nicht durch), würden Sie normalerweise tun es scanf mit:

int n; 
int *numbers; 

scanf("%d", &n); 

numbers = malloc(n * sizeof(*numbers)); 

for (int i=0; i<n; i++) 
    scanf("%d", &numbers[i]); 

Für robuste Fehlerbehandlung, die Sie häufig ein lesen mögen Linie zu einer Zeit mit fgets, dann parse das in einzelne Zahlen mit sscanf (oder etwas ähnliches).

Als beiseite: nein sollten Sie nicht werfen Sie die Rückkehr von malloc zu int *. Es ist weder notwendig noch wünschenswert in C. Just #include <stdlib.h>, und weisen Sie das Ergebnis wie oben gezeigt. Wenn Ihr Compiler Ihnen eine Warnung (oder einen Fehler) über eine Konvertierung gibt, bedeutet das, dass eines von zwei Dingen passiert: Sie haben entweder #include <stdlib.h> nach Bedarf vergessen, oder Sie kompilieren tatsächlich als C++. Wenn Sie C++ schreiben, schreiben Sie echtes C++, was bedeutet, dass Sie malloc überhaupt nicht verwenden sollten.

+0

WOW, ich wusste nicht, dass ich das tun könnte! Kannst du mir bitte erklären, warum irgendwas zwischen den Nummern ignoriert wird? Und wie geht der zweite Scanf von dort weiter, wo der erste Scanf gestoppt hat? – MinaHany

+0

Die "% d" scanf-Konvertierung überspringt den Leerraum vor einer Zahl (und Tabulatoren und neue Zeilen werden beide als Leerzeichen betrachtet). Wenn Sie eine Datei öffnen, hat sie einen "current position" Indikator, der durch die Funktionen aktualisiert wird, die daraus lesen ('getc',' scanf', 'fread', etc.) –

+0

aber im Fall von% ca weiß Raum wird korrekt gezählt? Ahh ja, ich weiß über die aktuelle Position aber wusste nicht, dass scanf es auch verwendet. – MinaHany

Verwandte Themen