2016-04-02 17 views
0

Angenommen, mein Programm muss 2 Eingänge erhalten: die erste entspricht der Größe des Arrays, und der zweite Eingang entspricht den Elementen des Arrays, durch ein einzelnes Leerzeichen getrennt.Füllen große Array in C mit scanf

dh (Eingang):

so habe ich eine Reihe von Größe bevöl n = 4 mit 1,2,3,4, wie ihre Elemente. Nun, ich die Art und Weise in der Regel tun, wäre so etwas wie:

int *vector=malloc(n*sizeof(int)); 
for(int i=0; i<n; i++){ 
    scanf("%d", &vector[i]); 
} 

, die für kleine Werte von n (wie 1000) gut funktioniert. Aber wenn ich es für, sagen wir, n = 1 Million oder sogar etwas wie 100.000 tue, funktioniert das überhaupt nicht. Es bleibt in einer Endlosschleife stecken. Gibt es also eine andere Möglichkeit, das Array mit scanf (oder fgets oder einer anderen Funktion) zu füllen?

+1

Ihre i eine ganze Zahl ist, die einen Maximalwert von 32767 hat –

+0

"* das geht gar nicht *" ist keine Problemaussage. Fix das – Amit

+0

Mit "in einer Endlosschleife stecken" meinst du, dass die for-Schleife über n hinaus geht? d. h. wo ist es in einer Schleife stecken und können Sie erweitern, woher wissen Sie? – noelicus

Antwort

0

die Tatsache ignorieren, dass die Leistung, wie es sollte nicht so gut ist, Sie erwägen, nicht das:

In C und C++ Sie haben diese Anforderungen

signed char: -2^07+1 to +2^07-1 
short:  -2^15+1 to +2^15-1 
int:   -2^15+1 to +2^15-1 
long:  -2^31+1 to +2^31-1 
long long: -2^63+1 to +2^63-1 

, dass Mittel :

Code

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

tatsächlich funktionieren, aber wenn Sie den n Wert wirklich groß gesetzt ist, dann erzeugt es einen Überlauf, und Sie werden in einer Endlosschleife gestapelt bekommen ...

+0

Also, Sie sagen, ich sollte für eine lange oder unsigned int gehen, anstatt nur int? –

+0

Ich sage, dass, wenn Sie eine for-Schleife zwischen 0 und 1 Million, aber Ihr Zähler nur 1000 Werte enthält, Ihre Schleife wird unendlich .... –

+0

so muss die Anzahl der Eingänge, die Sie lesen müssen, an den Datentyp übergeben werden ... –