C -, lese-mehrere zahlen von single-input line (scanf?)
Ich geschrieben habe eine Anwendung in C, die erwartet zwei Zeilen am Eingang.
Erste Eingabe wird erzählt, wie groß ein array von int wird und die zweite Eingabe enthält Werte, getrennt durch Leerzeichen.
Zum Beispiel, die folgenden input -
5
1 2 3 4 99
sollte ein array erstellen, mit {1,2,3,4,99}
Was ist der Schnellste Weg, dies zu tun? Mein problem ist zu Lesen, mehrere Nummern ohne Schleife über den gesamten string zu testen, ob Leerzeichen oder eine Zahl?
Dank.
InformationsquelleAutor migajek | 2010-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erinnern zu
free(v)
nachdem Sie fertig sind!Auch, wenn aus irgendeinem Grund Sie haben bereits die zahlen in einer Zeichenfolge, die Sie verwenden können
sscanf()
%d
(wie auch die meisten % conversions, aber nicht alle von Ihnen) automatisch überspringt alle whitespace-Zeichen. Lesen Sie die scanf-Dokumentation für details!"Wenn aus irgendeinem Grund"? Sie sollten nie
scanf
und sollte lieber mitfgets
mitsscanf
. c-faq.com/stdio/scanfprobs.htmlsorry, aber ich bin nicht einverstanden. Wenn Sie wirklich wissen wie zu verwenden scanf, können Sie es verwenden, sicher. Und mit dem wissen, ich meine, wirklich zu verstehen, alle Optionen und Umbauten von scanf. (Lesen Sie die gesamte manpage)
Die Tatsache, dass es verlassen kann, unverarbeitete Eingabe in den input-buffer sollte Sie zurückschrecken. Ja, es gibt Möglichkeiten, die Sie verwenden können
scanf
sicher, aber alle Reifen müssen Sie springen durch, die einfach nicht machen es lohnt sich.fgets
mitsscanf
ist viel einfacher und hat weniger Fallstricke für den Laien.InformationsquelleAutor Denilson Sá Maia
Hier ist ein Beispiel, genommen von http://www.cplusplus.com/reference/cstring/strtok/, dass habe ich angepasst, zu unserem Kontext.
Teilt es der str-Kette in sub-Ketten, und ich Sie dann konvertieren Sie jedes Teil in eine int. Ich erwarte, dass die Zeile die zahlen, getrennt durch Kommas, sonst nichts. Größe ist die Größe des array. Das sollten Sie tun scanf("%d", &Größe); als Denilson erklärte in seiner Antwort. Am Ende, Sie haben Ihr int-array mit allen Werten.
InformationsquelleAutor Lunfel
Hier 'N' ist die Anzahl der array-Elemente und Array 'A'
InformationsquelleAutor M.A.K. Ripon
scanf()
ist irgendwie ein Schmerz im Nacken. Check-outstrtol()
für diese Art von problem, es wird Ihr Leben sehr einfach.wird eine Zeile Lesen. Ich weiß nicht, warum würden Sie brauchen
strtok()
für Ihr problem.strtol geben wird, nur die erste Zahl. Das ist nicht der Zweck hier, oder?
Es gibt nur eine Zahl in einer Zeit, aber das ist leicht gelöst mit einer Schleife.
InformationsquelleAutor Carl Norum
Dieser code setzt ein straight-forward Ansatz, Lesen jedes Zeichen über getchar().Wir gehen auf das Lesen einer Anzahl util wir finden einen leeren Raum.Der index 'i' der array wird aktualisiert, nachdem die.Dies wird solange wiederholt, bis newline('\n') angetroffen wird
Dieser Ansatz schlägt fehl, wenn die zahlen negativ sind, oder beginnen Sie mit einem
'+'
. Es ist kein C-code.InformationsquelleAutor wahid_abdul