C-Problem? Im Unterforum Off-Topic - Beschreibung: Alles andere was nirgendwo reinpasst
| Autor |
|
|
|
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!
|
|
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
|