Frage zu konvertieren:C Programmeingabestring von Leerzeichen getrennt ints in einen int array
Ich möchte ein C-Programm machen, die eine Folge von Leerzeichen getrennt ints als Eingang (positive und negative, variable Zahl nimmt von Ziffern) und wandelt die Zeichenfolge in ein int-Array um.
Es gibt eine weitere Frage zum Lesen von Ints aus einer String-Eingabe in ein Array auf Stack Overflow, aber es funktioniert nicht für Zahlen mit einer Ziffernlänge von mehr als 1 oder negativen Zahlen.
Versuch:
#include <stdio.h>
int main() {
int arr[1000], length = 0, c;
while ((c = getchar()) != '\n') {
if (c != ' ') {
arr[length++] = c - '0';
}
}
printf("[");
for (int i = 0; i < length-1; i++) {
printf("%d,", arr[i]);
}
printf("%d]\n", arr[length-1]);
}
Wenn ich folgend in Terminal eingeben:
$ echo "21 7" | ./run
$ [2,1,7]
Dies ist das Array I erhalten: [2,1,7] anstelle von [21,7
]Wenn ich folgendes eingeben:
$ echo "-21 7" | ./run
$ [-3,2,1,7]
Ich bekomme: [-3,2,1,7] statt [-21,7] was keinen Sinn ergibt.
Wenn ich jedoch ein:
$ echo "1 2 3 4 5 6 7" | ./run
$ [1,2,3,4,5,6,7]
Anmerkung: Ich gehe davon aus, dass der Eingang es immer eine Reihe von Leerzeichen getrennt ganzen Zahlen.
Warum wird 'length' nicht auf einen Wert vor der Verwendung initialisiert? – babon
Ich habe das behoben. Ich stelle fest, dass ich 'getchar' verwende, das jeweils 1 Zeichen scannt. Würde 'scanf' hier helfen? Aber das erklärt nicht, warum ich '[-3,2,1]' für '-21' bekomme. – user6005857
Sie erhalten -3, weil das ASCII für '-' 3 weniger ist als das ASCII für' 0'. 'getchar()' erhält unabhängig von der Art des Zeichens nur ein Zeichen, daher behandeln Sie das Minuszeichen als Zahl. – Arc676