Ich kann Zeile auf Konsole mit printf
drucken. Aber wie liest man Zeile ohne std
Bibliothek?Zeile von Konsole ohne STD lesen
Antwort
standardisierte Methoden verwenden, wird Ihr Code garantiert werden tragbar sein über verschiedene Plattformen. Ohne das müssen Sie Code für jede Plattform schreiben, die Sie anvisieren möchten.
printf
und scanf
, std::cout
und std::cin
und std::cerr
bietet portable Möglichkeiten, um stdout/lesen von stdin/schreiben zu stderr zu schreiben. Wenn Sie dies vermeiden wollen, müssen Sie schreiben in Windows stdout mit
HANDLE GetStdHandle(DWORD nStdHandle);
BOOL WINAPI WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
und in einem POSIX-konformes System von
mitssize_t write(int fd, const void* buf, size_t count);
Sie sehen, man kann nie Port GetStdHandle
und WriteFile
zu Unix, noch können Sie write
zu Windows oder einem anderen System (wie Solaris) portieren. Selbst wenn Sie gerne Wrapper-Funktionen schreiben möchten, wäre das viel mühsamer als standardisierte Bibliotheken.
P.S. Der DWORD nStdHandle
WinAPI Parameter unterscheidet sich von der int fd
Unix-API, die ehemalige requires -10
, -11
and -12
for stdin/stdout/stderr sind, während letztere benötigt 0, 1 und 2.
Auch wenn Sie versuchen, etwas scheinbar einfach zu tun, werden Sie am Ende tut Extra Arbeit. Zum Beispiel:
Standardisierte:
#include<stdio.h>
printf("%d + %d = %d\n", a, b, a+b);
Unix:
#include <unistd.h>
// <stdio.h> and <string.h> is still needed.
char buf[64];
snprintf(buf, sizeof(buf)/sizeof(char),
"%d + %d = %d\n", a, b, a+b);
ssize_t written =
write(1, buf, strlen(buf));
Fenster:
#include <windows.h>
char buf[64];
snprintf(buf, sizeof(buf)/sizeof(char),
"%d + %d = %d\n", a, b, a+b);
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwWritten;
BOOL failed = WriteFile(
hOutput, buf, strlen(buf), &dwWritten, NULL
);
Eigentlich müssen Sie selbst die Zeichenfolge analysieren, wenn Sie nicht wollen, Verwenden Sie Standardfunktionen. Ich benutzte snprintf
/strlen
für einfache Illustration, aber das ist sicherlich ein bisschen mehr Arbeit.
Die Standardbibliothek bietet Methoden, die garantiert plattformübergreifend sind, und wird daher empfohlen, sie zu verwenden.
Wenn nicht, müssten Sie spezifischen Code schreiben, der auf eine Plattform abzielt.
Zum Beispiel, wenn Sie Linux-Ziel wollen, dann würden Sie verwenden read()
:
Lesen aus einem Dateideskriptor
- 1. Lesen kyrillisch von Konsole C++
- 2. lesen von der Konsole ohne das Programm zu pausieren
- 3. C# Assign Werte von Konsole Wörterbuch lesen, ohne Duplikate
- 4. Java-Konsole lesen Zeile für Zeile lesen und speichern in String-Array
- 5. Direkt von einem std :: istream in einen std :: string lesen
- 6. Lesen aus Datei Zeile für Zeile
- 7. Funken - CSV Lesen ohne neue Zeile Zeichen
- 8. Lesen von ganzen Zahlen von der Konsole
- 9. PHP -. Lesen von Zeile
- 10. Python, "gefilterte" Zeile Bearbeitung, lesen stdin von Char ohne Echo
- 11. Groovy Konsole lesen Eingang
- 12. lesen Konsole Zeichenfolge in Java
- 13. Initialisierung std :: string von char * ohne Kopie
- 14. Absturz beim Lesen von der Konsole - masm32
- 15. C++ lesen Integer-Array von der Konsole
- 16. Lesen von XMPP-Konsole mit node-xmpp
- 17. C++ Konsole Programmabstürze ohne Fehler
- 18. Lesen std :: string aus Binärdatei
- 19. C++ lesen Teile von Std auswählen :: Zeichenfolge
- 20. Lesen von Binärdaten in std :: string C++
- 21. Zeile nach spezifischer Zeile lesen
- 22. C++ lesen Zeile für Zeile Datei mit getline
- 23. wstring verwenden Zeile lesen Datei
- 24. C++ std :: Iterator ohne intern: std :: vector oder std :: list
- 25. Eine Zeile von stdin lesen
- 26. Konsole ohne Ausgang schließen
- 27. std :: vector bad_alloc ohne push_back
- 28. Benutzereingabe von R-Konsole: Rcpp und std :: cin
- 29. GZIPInputStream Zeile für Zeile lesen
- 30. Binärdaten lesen ohne reinterpret_cast
Warum ohne die Standardbibliothek? – Rakete1111
'std' gibt Ihnen die Garantie, dass es plattformübergreifend funktioniert. Sie müssen plattformspezifische Funktionen verwenden, wenn Sie sie nicht verwenden möchten. –
'scanf' gegenüber von 'printf' –