Ich arbeite ein Projekt zu schaffen, das eine benutzerdefinierte Header-Datei hat, und lief in einige Probleme:Probleme mit printf() und fgets()
Ich bin mir nicht ganz sicher, was diesen Code passiert ist, aber nach Ich fing an, die fgets()
Funktion zu benutzen, es scheint, die Ausgabe von etwas printf()
in meinem Code zu stoppen. Hier sind die wichtigen Teile des Codes, wahrscheinlich fehlen einige #include
Aussagen hier:
main.cpp
#include "ichat.h"
int main() {
prompts(P_IDLE, response);
prompts(P_USERNAME, response);
}
ichat.cpp
#include "ichat.h"
int prompts(int p_tag, char *response) {
if (p_tag == P_IDLE) {
printf("\nWaiting for connections. Press [ENTER] to start a chat.");
char msg[50];
char *ptr;
while (true) {
fgets(msg, strlen(msg), stdin);
ptr = (char*)memchr(msg, '\n', strlen(msg));
if (ptr != NULL) {
break;
}
} else if (p_tag == P_USERNAME) {
printf("\nPlease enter a username you'd like to use: ");
....
} ...
einige ichat.h
, sofern Sie neugierig waren ...
#define P_IDLE 0
#define P_USERNAME 1
kompiliert mit gcc main.cpp ichat.cpp
.
Das Problem besteht darin, dass beim Hinzufügen der While-Schleife mit der fgets()
-Funktion keine der printf()
-Funktionen die Ausgabe in der Befehlszeile erzeugt. Ich bin nicht genau sicher, was hier passiert, weil diese Druckfunktionen funktionierten, und manchmal funktionieren sie, wenn ich die \n
entferne, oder wenn ich eine weitere printf()
Funktion direkt vor ihnen hinzufüge. Es ist ziemlich verwirrend ...
Gibt es einen besseren Weg, um Eingaben vom Benutzer zu erhalten? Ich bin offen für irgendwelche Hinweise, Kritiken und Ideen zu irgendeinem Teil meines Codes.
Sie haben geschrieben "Implementierung der' fgets() '-Funktion". Das klingt, als ob du deine eigene Version von 'fgets()' schreibst, aber der Code sieht so aus, als würdest du ihn nur aufrufen. Bitte aktualisieren Sie Ihre Frage, um das zu klären. –
Was erwartest du, dass Strlen zurückkehrt, wenn du es an Fgets übergibst? Warum markieren Sie dieses C++, wenn Sie printf und fgets anstelle von iostreams verwenden? – kfsone
'strlen()' übergibt die Länge der Zeichenfolge 'msg' an diese Funktion, denke ich. Ich benutzte 'printf' und' fgets', weil es mit einem Buch übereinstimmte, das ich zu diesem Thema gelesen hatte. Ich könnte es in Iostreams umwandeln, glaubst du, es würde helfen? – SuperContraptionGuy