wenn 'A' dann gibt morsezeichen von A aus
-
hallo
ich hab da mal ne frage. ich soll ein kleines programm schreiben welches normaler text in morsecode umwandelt.
das geht doch mit nem switch oder?
also wenn ich das dann so mache:
#include <stdio.h> int main() { char str[160]; printf("Bitte gebe den zu uebersetzenden Text ein\n(max. 160 Zeichen) : "); scanf("%s", &str); switch (str) { case 'A' : printf(".-"); break; case 'B' : printf("-...); break; .... } }
kann das so gehen? also wenn ich nach dem schema weitermache.
und wie kann ich einem case 2 werte geben? also dass er sowohl bei 'A' als auch bei 'a' dann den morsecode ".-" ausgibt?
hoffe mal auf ein paar tips.
gruss
-
#include <stdio.h> int main() { char str[160]; printf("Bitte gebe den zu uebersetzenden Text ein\n(max. 160 Zeichen) : "); scanf("%s", &str); switch (str) //denk dran, dass nur str[0] überprüft wird { case 'a' : case 'A' : printf(".-"); break; case 'b' : case 'B' : printf("-...); break; .... } }
Wenn du beik break; setzt werden die anweisungen des nächsten case zweigs mit ausgeführt, bis zum ender der switch anweisung bzw. dem nächsten break.
btw:
- siehe Kommentar: du überprüfst nur das erste zeichen.
- du hast nur 159 Zeichen zur verfügung, da der String mit '\0' terminiert wird/werden muss.
-
#include <stdio.h> int main() { char str[160]; printf("Bitte gebe den zu uebersetzenden Text ein\n(max. 160 Zeichen) : "); scanf("%s", &str); switch (tolower(str)) //denk dran, dass nur str[0] überprüft wird { case 'a' : printf(".-"); break; case 'b' : printf("-...); break; .... } }
- siehe Kommentar: du überprüfst nur das erste zeichen.
nee, das wäre mit *str. nur str liefert die adresse des ersten zeichens und das wird nix.
warum keine schleife um getche()?
ch=getche(); while(ch!=EOF && ch!=27){ switch(ch){ ... } ch=getche(); }
-
hey!
danke für die antwort. nun hab ich das problem, dass er mir nur den ersten Buchstaben als morsecode ausgibt
habs mal mit ner while schleife probiert, aber das will ned gehen -.-hier mal der bisherige code:
#include <stdio.h> char uebersetze(char str); char uebersetze(char str) { printf("Bitte gebe den zu uebersetzenden Text ein : "); scanf("%s", &str); while(str['A'] != '\0') { switch (str) { case 'a' : case 'A' : printf(".-"); break; case 'b' : case 'B' : printf("-..."); break; case 'c' : case 'C' : printf("-.-."); break; case 'd' : case 'D' : printf("-.."); break; case 'e' : case 'E' : printf("."); break; case 'f' : case 'F' : printf("..-."); break; case 'g' : case 'G' : printf("--."); break; case 'h' : case 'H' : printf("...."); break; case 'i' : case 'I' : printf(".."); break; case 'j' : case 'J' : printf(".---"); break; case 'k' : case 'K' : printf("-.-"); break; case 'l' : case 'L' : printf(".-.."); break; case 'm' : case 'M' : printf("--"); break; case 'n' : case 'N' : printf("-."); break; case 'o' : case 'O' : printf("---"); break; case 'p' : case 'P' : printf(".--."); break; case 'q' : case 'Q' : printf("--.-"); break; case 'r' : case 'R' : printf(".-."); break; case 's' : case 'S' : printf("..."); break; case 't' : case 'T' : printf("-"); break; case 'u' : case 'U' : printf("..-"); break; case 'v' : case 'V' : printf("...-"); break; case 'w' : case 'W' : printf(".--"); break; case 'x' : case 'X' : printf("-..-"); break; case 'y' : case 'Y' : printf("-.--"); break; case 'z' : case 'Z' : printf("--.."); break; default: printf(" %s Keine gueltige Eingabe!\n", str); } } system("pause"); } int main() { char str = 'A'; uebersetze(str); }
-
"while(str['A'])..." ist Käse - das überprüft das *nachzählt* 64. Zeichen deines Strings. Außerdem solltest du eher mit char* arbeiten als mit char - in einem char kannst du nämlich nur ein einzelnes Zeichen speichern:
#define TEXTLEN 100 const char* uebersetze(char ch) { switch(ch) { case 'A':case 'a':return ".-"; case 'B':case 'b':return "-..."; ... default: return " "; } } int main() { char text[TEXTLEN+1]; printf("Text eingeben, maximal %d Zeichen:",TEXTLEN); scanf("&s",text); printf("Morse-Text:\n"); for(int i=0;i<strlen(text);++i) printf(uebersetzen(text[i]); }
(PS: Der Prototyp ist übrigens überflüssig, wenn du gleich darunter deine Funktion definierst ;))
-
viel günstiger gehts so
eine matrix mit allen möglichen strings:
char code[26][5]={".-","-..." ... }
for (i=0;i<strlen(text);i++){ printf("%s",code[text[i]-'A']); }
naja, in die schleife muss noch ne prüfung, obs auch n buchstabe is, und ob wenn der klein is, muss halt anstatt -'A' da -'a' hin...
gruß, mata
-
Und sicherheitshalber würde ich mal mit fgets einlesen, da du scanf nur bis zum ersten Leerzeichen liest.
scanf("&s",text);