![]() |
[C] fgets() wird nicht ausgeführt
hallo,
für einen kleinen chat habe ich folgenden code geschrieben. allerdings wird in der main function das fgets nicht ausgeführt (getchar & scanf genauso wenig). hat jmd einen hinweis? das 2. programm realisiert das senden und funktioniert fehlerfrei. ich verwende TC2.01 unter Win98
Code:
#include <stdio.h>
#define FALSE 0 #define TRUE !FALSE #define SYN 22 #define NUL 0 #define DELAY 20 #define PORT 768 #define BUFFER_LEN 1024 int idx; char buffer[BUFFER_LEN] = ""; /* Dummys */ char inportb() {char c;scanf("%c", &c);return c;} void outportb(int port, char c) {printf("%c ", c);} void delay() {} void write() { idx = 0; do { outportb(PORT, SYN); delay(DELAY); outportb(PORT, buffer[idx]); delay(DELAY); } while (buffer[idx] != NUL && ++idx); } char read_char() { char in; int syn_found = FALSE; while (TRUE) { if ((in = inportb(PORT)) == SYN) { syn_found = TRUE; continue; } if (syn_found) { buffer[idx++] = in; return in; } } } void read() { idx = 0; while (read_char() != NUL) ; } int main() { int is_sender = TRUE; while (TRUE) { if (is_sender) { printf("write:\n"); fgets(buffer, BUFFER_LEN, stdin); /* <-- Hier ist der Fehler /////////////////////////////////*/ write(); buffer[0] = NUL; is_sender = !is_sender; } else { printf("read:\n"); read(); printf("%s\n", buffer); buffer[0] = NUL; is_sender = !is_sender; } } }
Code:
#include <stdio.h>
#define FALSE 0 #define TRUE !FALSE #define SYN 22 #define NUL 0 #define DELAY 20 #define PORT 768 #define BUFFER_LEN 1024 int idx; char buffer[BUFFER_LEN] = ""; char inportb() {char c;scanf("%c", &c);return c;} void outportb(int port, char c) {printf("%c ", c);} void delay() {} void write() { idx = 0; do { outportb(PORT, SYN); delay(DELAY); outportb(PORT, buffer[idx]); delay(DELAY); } while (buffer[idx] != NUL && ++idx); } int main() { printf("write:\n"); fgets(buffer, BUFFER_LEN, stdin); write(); buffer[0] = NUL; return 0; } |
AW: [C] fgets() wird nicht ausgeführt
kleiner nachtrag, fgets wird nicht ausgeführt heißt, das er bis zum fgets alles korrekt ausführt, aber keine tastatureingabe zulässt, es erscheinen keine buchstaben im terminal. auch alles nach dem fgets wird nicht ausgeführt.
|
AW: [C] fgets() wird nicht ausgeführt
Was versuchste denn zu erreichen?
Vom Aufruf von fgets() kehrt der Code meines Erachtens nach erst dann zurück wenn die Anzahl Zeichen gelesen wurde, oder irre ich mich? Du solltest übrigens fflush() vor fgets() aufrufen. |
AW: [C] fgets() wird nicht ausgeführt
Zitat:
fflush is afaik nur für scanf interessant, oder? |
AW: [C] fgets() wird nicht ausgeführt
Zitat:
Zitat:
|
AW: [C] fgets() wird nicht ausgeführt
Also bei mir wird es erst beim Zweiten mal nicht mehr vernünftig ausgeführt.
Code:
Nachtrag: hmm, is ja klar wenn ich den Code lese (besonders das else).
$ gdb ./fle
GNU gdb (GDB) 7.1-ubuntu Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /home/oliver/test/fle...done. (gdb) b main Breakpoint 1 at 0x400814: file fle.c, line 54. (gdb) run Starting program: /home/oliver/test/fle Breakpoint 1, main () at fle.c:54 54 int is_sender = TRUE; (gdb) n 57 if (is_sender) { (gdb) 58 printf("write:\n"); (gdb) write: 59 fgets(buffer, BUFFER_LEN, stdin); /* <-- Hier ist der Fehler /////////////////////////////////*/ (gdb) p buffer $1 = '\000' <repeats 1023 times> (gdb) p BUFFER_LEN $2 = 1024 (gdb) c Continuing. cjlfwenbchkjwebfcfjwkecbwreckjwrcb c j l f w e n b c h k j w e b f c f j w k e c b w r e c k j w r c b read: dwcjklwshckjwebcwkcwbecwbc Noch'n Nachtrag: also wo ist jetzt dein Problem? Rein prinzipiell sollte der Code funzen. |
AW: [C] fgets() wird nicht ausgeführt
er "hängt" beim fgets. danach geht nix mehr. keine reaktion
|
AW: [C] fgets() wird nicht ausgeführt
Du gibst aber schon was ein und drückst dann Enter, oder? :stupid:
Wenn das ein Windows-98-spezifisches Problem sein sollte, könnte es schwer werden dir zu helfen. Ich zumindest habe hier keine Kopie mehr rumliegen. |
AW: [C] fgets() wird nicht ausgeführt
Zitat:
ich KANN nichts eingeben. |
AW: [C] fgets() wird nicht ausgeführt
Zitat:
Einerlei. TC klingt nach TurboC, also DOS, richtig? Was passiert denn exakt wenn du dein Programm in einer geöffneten DOS-Konsole startest? Zeigt nur das "write:" und dann nix? Woran erkennst du denn daß du nix eingeben kannst? Vielleicht werden die Eingaben nur nicht auch ausgegeben? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz