C - Klausuraufgabe - Brauche eure Hilfe
-
itedvo schrieb:
nein, jetzt wirklich, was is an meinem code jetzt so schlimm ?
Zweibuchstabige Makros.
-
aha, und was währe für ä besser geignet als ae? etwa _ae was wiederum etwas ist
was man vermeiden sollte, da underscore schon verwendet sein kann...was wären den bessere namen? damit ich es nächstes mal besser machen kann...
-
itedvo schrieb:
aha, und was währe für ä besser geignet als ae? etwa _ae was wiederum etwas ist
was man vermeiden sollte, da underscore schon verwendet sein kann...was wären den bessere namen? damit ich es nächstes mal besser machen kann...
1. Namen nehmen die nicht extrem häufig zufällig vorkommen können.
2. Wozu überhaupt diese Makros? Entweder kennt deine Plattform die Zeichen sowieso - in diesem Fall kannst du sie direkt in die Stringliterale schreiben - oder sie kennt sie nicht und es kommt trotz der Makros Zeichensalat heraus.
-
Auf Windows ist sowas notwendig
<-- MacUser
-
Habe jetzt eine Loesung die funktioniert und fuer mich am durchschaubarstem erscheint:
#include <stdio.h>
int main(void){
int eingabe;scanf("%d", &eingabe);
switch(eingabe)
{
case 5: printf("fuenf\n"); break;
case 6: printf("Sechs\n"); break;
case 7: printf("Sieben\n"); break;
case 8: printf("Acht\n"); break;
case 9: printf("Neun\n"); break;
default: printf("hau rein!\n");break;
}
return 0;
}Ist die Loesung legitim oder funktioniert es nur so in diesem Fall?
Beste Gruesse
-
Du sollst einen char einlesen...
-
SeppJ schrieb:
itedvo schrieb:
aha, und was währe für ä besser geignet als ae? etwa _ae was wiederum etwas ist
was man vermeiden sollte, da underscore schon verwendet sein kann...was wären den bessere namen? damit ich es nächstes mal besser machen kann...
1. Namen nehmen die nicht extrem häufig zufällig vorkommen können.
2. Wozu überhaupt diese Makros? Entweder kennt deine Plattform die Zeichen sowieso - in diesem Fall kannst du sie direkt in die Stringliterale schreiben - oder sie kennt sie nicht und es kommt trotz der Makros Zeichensalat heraus.ach so... was die makros angeht hat 314159265358979 schon recht... auf Windows,
vorallem auf Consolen Ebene wird zum beispiel bei einemprintf("Die Bären");
anstatt ein ä irgendwas ausgegeben...
wxSkip schrieb:
Dsa richtige Funktionieren deines Codes wird von ANSI C aber auch nicht garantiert. ('0' muss nicht gleich 48 sein, Ü muss es vielleicht gar nicht im Zeichensatz geben). Macht es doch einfach mit case '5':, case '6', usw.
weiteres hab ich jetzt ein wenig nachgeforscht und es hat sich endgültig ergeben,
dass die Zahl 0 im ASCII-Code als 48 definiert ist. weiteres haben alle höhere
Zeichentabellen den ASCII-Code am Anfang sprich es wird auf dem ASCII-Code
aufgebaut. [Links folgen] Was soviel bedeutet wie, dass in so gut wie jeder Darstellung folgendes
korrekt ist:int main(){ char zeichen; scanf("%c", &zeichen); // es wurde die Zahl (!) 5 eingelesen --> zeichen = 53 printf("%d", zeichen-48); // es wird 5 ausgegeben return 0; }
woraus dann folglich richtig ist:
int main(){ char eingabe; scanf("%c", &eingabe); eingabe-=48; switch(eingabe){ case 1: printf("EINS\n"); break; case 2: printf("ZWEI\n"); break; case 3: printf("DREI\n"); break; case 4: printf("VIER\n"); break; case 5: printf("FÜNF\n"); break; default: printf("Falsche Eingabe\n"); } return 0; }
-
Zu den Makros: Da kann man ja trotzdem Konstanten nehmen. Außer, du willst gleich so etwas machen:
#ifndef DEF_H #define DEF_H const unsigned char AE = 142; const unsigned char ae = 132; const unsigned char OE = 153; const unsigned char oe = 148; const unsigned char UE = 154; const unsigned char ue = 129; const unsigned char ss = 225; #define STR_AE "\x8e" #define STR_ae "\x84" //usw... #endif /* DEF_H */
#include <stdio.h> #include "def.h" int main() { printf("Echt " STR_UE "bel"); }
Zu 48: Warum nimmst du nicht einfach '0'? Das funktioniert auch bei nicht-ASCII und ist leichter lesbar.
P.S.: Vielleicht kannst du mit Windows-Spezifischen Sachen erreichen, dass deine Umlaute auch normal in Stringliteralen richtig ausgegeben werden. Ich glaube, ich habe das mal herausgefunden (vielleicht war's auch mit Locales), es aber nicht benutzt, weil diese Funktion dann noch eine Debugausgabe gemacht hat, die ich nicht wollte.
-
Es muss ja nicht immer ASCII sein.
Wie wärs z.B. mal mit http://de.wikipedia.org/wiki/EBCDIC auf IBM Großrechnern?
Der Standard garantiert, dass die Ziffern von '0' bis '9' fortlaufend codiert sind.
Aber nicht, dass die '0' durch den Wert 48 dargestellt wird.
-
#include <stdio.h> int main() { char eing = getchar(); switch(eing) { case '5': puts("fuenf"); break; case '6': puts("sechs"); break; case '7': puts("sieben"); break; case '8': puts("acht"); break; case '9': puts("neun"); break; default: putchar(' '); } return 0; }
-
@jans94: Das üben wird aber nochmal...es soll die Funktion scanf genutzt werden und nach der Ausgabe "neun" soll Ende sein.
-
Hi,
bin ein ziemlicher neuling, aber habe auch mal versucht das problem zu lösen. Wenn ich keinen fehler gemacht habe sollte dieser weg am einfachsten sein.#include <stdio.h> int main(void) { int eingabe; Printf("Bitte Zahl eingeben: "); scanf("%d", &eingabe); switch(eingabe) { case 5: Printf("Fünf"); break; case 6: Printf("Sechs"); break; case 7: Printf("Sieben"); break; case 8: Printf("Acht"); break; case 9: Printf("Neun"); break; } return 0; }
-
printf wird klein geschrieben.
Außerdem sollte ein Zeichen eingelesen werden. Du liest eine Zahl ein.