2017-05-03 11 views
3

Wenn ich Eingang 3 Nummern erhalten möchten, ich Code wie diesen schreiben können:Wie bekomme ich mehrere Nummern von einer Zeile in C?

scanf("%d %d %d", &a, &b, &c); 

aber wie kann ich dynamisch die Anzahl der Eingänge von einer Linie?

Wenn beispielsweise Benutzer gibt N (Anzahl), dann habe ich wie oben N ganzzahlige Anzahl Eingänge von einer Zeile zu erhalten.

Die Eingabe und Ausgabe sollte sein:

how many do you want to enter: 5 
1 2 3 4 5 
sum: 15 
+1

Lesen die gesamte Zeile als eine Zeichenfolge und parsen die Zeichenfolge, – OldProgrammer

+1

Read ein Wert zu einem Zeitpunkt, in einer Schleife, bis die Eingabe erschöpft ist. –

+1

http://stackoverflow.com/questions/15291523/accepting-any-number-of-inputs-from-scanf-function – peter

Antwort

5

Seit scanf gibt die Menge an Variablen gefüllt Sie können Schleife, bis scanf hat keinen Wert mehr zu lesen oder die Zählung angepasst ist:

int count = 0; 
printf("how many do you want to enter: "); 
scanf("%d", &count); 
int val = 0; 
int sum = 0; 
int i = 0; 
while(scanf("%d ", &val) == 1 && i++ < count) 
    sum += val; 
+0

Wenn ich 1 2 3 4 5 eingeben, sind diese Nummern im Standard-Eingabepuffer. also, liest scanf Eingabe von diesem Puffer, obwohl ich nur eine Zeile eingeben ?? Deshalb funktioniert diese Anleitung? – user7159879

-3

Wie schon jemand sagte, kann man es einfach als String lesen und die Werte trennen, wenn man ein Leerzeichen sieht. In c, wenn Sie eine Nummer wie 5, die ein Zeichen ist, dass Sie es in eine Reihe, indem Sie diese drehen kann:

int foo = '5' - '0' //foo is now 5 

und für mehr als eine Ziffer Zahlen Sie Schleife durch die Zeichenfolge können und ihre Position finden und multiplizieren sie mit 10 dann fügen sie alle

EDIT: vergessen auch zu erwähnen, aber man kann die eine char * verwenden atoi nimmt und wandelt es in eine Reihe

1

Wie Sie die Größe der Eingänge nicht wissen vorher Es ist besser, ein dynamisches Array basierend auf der Eingabegröße des Benutzers zu erstellen. Geben Sie die Größe des Arrays ein und erstellen Sie ein Array dieser Größe. Dann können Sie das Array einfach durchlaufen und damit machen, was Sie wollen.

int count = 0, sum = 0; 
printf("how many do you want to enter: "); 
scanf("%d", &count); 

int *num = malloc(sizeof(int)*count); 

for(int i = 0; i < count; i++) { 
    scanf("%d ", &num[i]); 
    //sum += num[i]; 
} 
Verwandte Themen