www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik getchar problem


Autor: Michael B. (michael_b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich suche nach einer Funktion wie scanf, welche sich aber nicht wie ein 
LOOP auf das Programm auswirkt.
Ich habe vor einiger Zeit mal so eine Funktion aus der stdio.h 
Bibliothek benutzt, weiss aber nicht mehr genau welche. Vielleicht war 
es getchar

So viel ich weiss benutze ich die funktion so:

i = getchar();

der inhalt von i wurde nun immer mit dem letzten Zeichen, welcher auf 
der Tastatur eingegeben wurde gefüllt.

Hat jemand eine Lösung?

mfg

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast eine wichtige Angabe vergessen.
Für welches Target soll das Programm sein?

Autor: Michael B. (michael_b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutze einen Reneasas H836049F mit der HEW Umgebung 
(High-performance Ebmedded Workshop)

Wenn es das ist was du meinst

Autor: Michael B. (michael_b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So sieht ein Teil des Programms aus:
printf("Um auszuwerten bitte 0 eingeben : ");
  while(1)
  {
    i = getchar();
    if(i = '0')
    {
      printf("Taster1 wurde %d mal gedrueckt. \r\n" ,ucTaster1 );
      printf("Taster2 wurde %d mal gedrueckt. \r\n" ,ucTaster2 );
      printf("Taster3 wurde %d mal gedrueckt. \r\n" ,ucTaster3 );
      printf("Taster4 wurde %d mal gedrueckt. \r\n" ,ucTaster4 );
      i = 0x00;
    }
    if(T1 == 1)
    {
      ucTaster1++;
    }
    if(T2 == 1)
    {
      ucTaster2++;
    }
    if(T3 == 1)
    {
      ucTaster3++;
    }
    if(T1 == 4)
    {
      ucTaster4++;
    }
    /*scanf("%d",&i);                   //Wartet auf die Eingabe
    printf("Die Zahl die Sie eingegeben haben war %d \n\r",i);*/
  }
  
}

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat die Library für deinen µC eine Funktion kbhit(), also eine Funktion 
zum Abfragen, ob ein Zeichen an der Eingabe vorliegt ohne darauf zu 
warten. Wenn ja könntest du so arbeiten:
  if ( kbhit() != 0 )
  {
    i = getchar();
    if( i == '0' ) // <=== Achtung == nicht = !
    {
      printf("Taster1 wurde %d mal gedrueckt. \r\n" ,ucTaster1 );
      ...
    }
  }

Autor: Michael B. (michael_b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Nein meine Bibliothek unterstützt diesen Befehl leider nicht...
Mein Kollege sagte noch dazu, dass ich keinen direkten Zugriff auf die 
Tastatur habe, da ich über ein Terminalprogramm arbeite, deswegen würde 
dies mit dieser Funktion nicht funktionieren. Ich bräuche eine Funktion 
aus einer Standardbibliothek.

mfg

Autor: Edding (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael B. schrieb:
> Ich bräuche eine Funktion
> aus einer Standardbibliothek.

Zählt "select" (oder poll) zu deiner Standardbibliothek?

Wenn ja: Vor dem Buchstaben-Einlesen einfach nachsehen, ob der 
STDIN-Socket noch daten hat. Statt getchar aber dann besser ein 
ungebuffertes ein-byte-"read" verwenden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.