AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[C] fgets() wird nicht ausgeführt

Ein Thema von fwsp · begonnen am 30. Nov 2010 · letzter Beitrag vom 1. Dez 2010
Antwort Antwort
Seite 1 von 2  1 2      
fwsp
(Gast)

n/a Beiträge
 
#1

[C] fgets() wird nicht ausgeführt

  Alt 30. Nov 2010, 15:18
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;
}
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#2

AW: [C] fgets() wird nicht ausgeführt

  Alt 30. Nov 2010, 19:23
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.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#3

AW: [C] fgets() wird nicht ausgeführt

  Alt 30. Nov 2010, 19:28
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.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#4

AW: [C] fgets() wird nicht ausgeführt

  Alt 30. Nov 2010, 19:32
Vom Aufruf von fgets() kehrt der Code meines Erachtens nach erst dann zurück wenn die Anzahl Zeichen gelesen wurde, oder irre ich mich?
irrst dich, die länge is die max zahl an zeichen.
fflush is afaik nur für scanf interessant, oder?
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#5

AW: [C] fgets() wird nicht ausgeführt

  Alt 30. Nov 2010, 19:37
Vom Aufruf von fgets() kehrt der Code meines Erachtens nach erst dann zurück wenn die Anzahl Zeichen gelesen wurde, oder irre ich mich?
irrst dich, die länge is die max zahl an zeichen.
Okay, ich werf mal GDB an.

fflush is afaik nur für scanf interessant, oder?
Nein allgemein.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#6

AW: [C] fgets() wird nicht ausgeführt

  Alt 30. Nov 2010, 19:46
Also bei mir wird es erst beim Zweiten mal nicht mehr vernünftig ausgeführt.

Code:
$ 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
Nachtrag: hmm, is ja klar wenn ich den Code lese (besonders das else).

Noch'n Nachtrag: also wo ist jetzt dein Problem? Rein prinzipiell sollte der Code funzen.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)

Geändert von Assarbad (30. Nov 2010 um 19:53 Uhr)
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#7

AW: [C] fgets() wird nicht ausgeführt

  Alt 30. Nov 2010, 20:05
er "hängt" beim fgets. danach geht nix mehr. keine reaktion
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: [C] fgets() wird nicht ausgeführt

  Alt 30. Nov 2010, 20:29
Du gibst aber schon was ein und drückst dann Enter, oder?

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.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#9

AW: [C] fgets() wird nicht ausgeführt

  Alt 30. Nov 2010, 21:09
Du gibst aber schon was ein und drückst dann Enter, oder?
nein.

ich KANN nichts eingeben.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#10

AW: [C] fgets() wird nicht ausgeführt

  Alt 30. Nov 2010, 21:23
Du gibst aber schon was ein und drückst dann Enter, oder?
nein.

ich KANN nichts eingeben.
Aha, faszinierend. Das ist ein Detail was so leider bisher nicht herauskam

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?
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz