C-Problem?

Im Unterforum Off-Topic - Beschreibung: Alles andere was nirgendwo reinpasst

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 26 12 2025  13:17:48      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Oszilloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Off-Topic        Off-Topic : Alles andere was nirgendwo reinpasst


Autor
C-Problem?

    







BID = 438229

Spongebob

Gesprächig



Beiträge: 105
 

  


Moin!
Ich hab heut mal wieder son bisschen mit C rumgespielt.
Hab ein ganz einfaches Programm geschrieben, welches Dezizahlen in Hexadesimal, oktal und ASCII umwandelt. Das sieht so aus:


Code :

#include <stdio.h>

#include <ctype.h>

main()
{
char eingabe;
int zahl;

printf ("Waehle eine Umrechnung aus.(O)ktal, (H)exadezimal oder (A)SCII> ");
eingabe=getchar();
printf ("\nZahl eingeben:");
scanf ("%i", &zahl);

switch (toupper(eingabe))
{
case 'O':
printf ("Die Zahl %i ist in Oktal %o", zahl, zahl);
break;

case 'H':
printf ("Die Zahl %i ist in Hexa %x", zahl, zahl);
break;

case 'A':
if (zahl<=255)
{
printf ("Die Zahl %i ist in Ascii %c", zahl, zahl);
}
else
printf ("Zahl zu gross");

break;

//default:
//printf ("Die eingabe ist nicht moeglich");
}

}


Wenn ich jetzt aber zuerst die Zahl und dann den Buchstaben einlesen will, also so:


Code :


#include <stdio.h>
#include <ctype.h>

main()
{
char eingabe;
int zahl;

printf ("\nZahl eingeben:"); //Das hier
scanf ("%i", &zahl); //und das hier steht jetzt oben
printf ("Waehle eine Umrechnung aus.(O)ktal, (H)exadezimal oder (A)SCII> ");
eingabe=getchar();

switch (toupper(eingabe))
{
case 'O':
printf ("Die Zahl %i ist in Oktal %o", zahl, zahl);
break;

case 'H':
printf ("Die Zahl %i ist in Hexa %x", zahl, zahl);
break;

case 'A':
if (zahl<=255)
{
printf ("Die Zahl %i ist in Ascii %c", zahl, zahl);
}
else
printf ("Zahl zu gross");

break;

//default:
//printf ("Die eingabe ist nicht moeglich");
}

}


funktioniert das nicht mehr weil ich nachdem ich die Zahl eingegeben hab keinen buchstaben mehr eingeben kann.
Ich kann mir das echt nicht erklähren. Ihr vielleicht?
Mfg Jan

BID = 438241

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach

 

  

Im 1. Beispiel holt getchar genau 1 Zeichen und dann folgt scanf und interpretiert die daraufolgenden Zeichen bis zum Delimiter als Integerkonstante.

Im 2. Beispiel versucht scanf die Zeichenkette als Zahl zu interpretieren und scheitert wahrscheinlich am falschen Format, denn als letztes Zeichen einer Integerkonstante dürfen allenfalls die Suffices für unsigned oder long auftreten.
getchar wird dann garnicht mehr ausgeführt.

Versuchs mal mit einem Leerzeichen oder einem u hinter der Zahl und vor dem Steuerbuchstaben.


_________________
Haftungsausschluß:



Bei obigem Beitrag handelt es sich um meine private Meinung.



Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.



Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !

[ Diese Nachricht wurde geändert von: perl am 22 Jun 2007  1:52 ]

BID = 438412

Radioactiveman12

Gerade angekommen


Beiträge: 1

Hallo Spongebob,

Bei dem 2. Programm musst du zwischen den Zeilen



Code :


scanf ("%i", &zahl); //und das hier steht jetzt oben
printf ("Waehle eine Umrechnung aus.(O)ktal, (H)exadezimal oder (A)SCII> ");
eingabe=getchar();



noch den Eingabepuffer der Tastatur leeren, dann funktioniert es!

Das sieht dann so aus:



Code :


scanf ("%i", &zahl); //und das hier steht jetzt oben
printf ("Waehle eine Umrechnung aus.(O)ktal, (H)exadezimal oder (A)SCII> ");

// Hier wird der Tastaturpuffer geleert
cin.seekg(0,std::ios::end);
cin.clear();

// Buchstaben einlesen zur Auswahl
eingabe=getchar();



Dein Problem ist nämlich, dass die zuletzt gedrückte Taste die RETURN-Taste ist.
Die scanf()-Funktion holt sich dann den Text, aber die RETURN-Taste bleibt noch im Puffer.

Dann liest getchar() die Zeichen im Eingabepuffer und findet zuerst das RETURN, welches es dann auswertet und die Eingabe damit abschließt (eine RETURN beendet ja die Eingabe) bevor du noch irgendeinen Buchstaben übergeben konntest!




Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 17 Beiträge im Durchschnitt pro Tag       heute wurden bisher 6 Beiträge verfasst
© x sparkkelsputz        Besucher : 187961073   Heute : 19524    Gestern : 18748    Online : 406        26.12.2025    13:17
20 Besucher in den letzten 60 Sekunden        alle 3.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.183140039444