Frage zu strings!
-
Erstens: Nimm lieber fgets(), damit kannst du auch kontrollieren, wieviel maximal eingelesen wird.
Zweitens: man: toupper macht bestimmt nicht das, was du vorhast.
Drittens: Anstelle der vielen if() würde ich ja ein switch() hinsetzen.
Viertens: Was sagt dein Debugger? Du könntest ein leichtes Problem damit bekommen, daß i nicht initialisiert wird (und daß Array-Indizes von 0 bis n-1 gerechnet werden).
-
CStoll schrieb:
Erstens: Nimm lieber fgets(), damit kannst du auch kontrollieren, wieviel maximal eingelesen wird.
OK! werde ich machen!
CStoll schrieb:
Zweitens: man: toupper macht bestimmt nicht das, was du vorhast.
Da bin ich auch grade draufgekommen
CStoll schrieb:
Drittens: Anstelle der vielen if() würde ich ja ein switch() hinsetzen.
switch hab ich mir ncoh ncith angesehn deshalb die vielen if's werde mir die funktion aber gleich reinziehn!
CStoll schrieb:
Viertens: Was sagt dein Debugger? Du könntest ein leichtes Problem damit bekommen, daß i nicht initialisiert wird (und daß Array-Indizes von 0 bis n-1 gerechnet werden).
Debugger sagt nichts
-
toupper funzt ned! Compiler sagt nichts hier noch mal der code:
#include<stdio.h> #include<conio.h> #include<string.h> #include<ctype.h> char string[100]; //zum einlesen des wortes int i=0; int main(){ printf("Bitte geben sie ein Wort ein (nicht groeser als 100 Buchstaben) ==>"); fgets(string, 100, stdin); zeichen_lesen(); } int zeichen_lesen(){ char zeichen = string[i]; int toupper(int zeichen); printf("%c", zeichen); getch(); } switch (zeichen){ case 'A':A_ausgabe(); case 'B':B_ausgabe(); case 'C':C_ausgabe(); case 'D':D_ausgabe(); //usw...
-
Ja klar - du hast ja auch nur eine lokale Funktion mit diesem Namen deklariert. Anwenden könntest du das z.B. so:
for(int i=0;string[i]!='\0';++i)//kompakter als deine while()-Version) { char zeichen = toupper(string[i]); switch(zeichen) { case 'A': A_Ausgabe();break;//die break's sind wichtig case 'B': B_Ausgabe();break; ... default : keine_Ausgabe();break; } }
-
JOP! ES FUNKTIONIERT JETZT MUSS ICH NUR MEHR DIE BUCHSTABEN GESTALTEN!^^ hab die for schleife allerdings weggeslassen die brauche ich ned !
DANKE!!!!!!!!!!!!hier jetzt der fertige Code:
#include<stdio.h> #include<conio.h> #include<string.h> #include<ctype.h> char string[100]; //zum einlesen des wortes int i=0; int main(){ printf("Bitte geben sie ein Wort ein (nicht groeser als 100 Buchstaben) ==>"); fgets(string, 100, stdin); zeichen_lesen(); } int zeichen_lesen(){ char zeichen; zeichen = toupper(string[i]); switch (zeichen){ case 'A':A_ausgabe();break; case 'B':B_ausgabe();break; case 'C':C_ausgabe();break; case 'D':D_ausgabe();break; case 'E':E_ausgabe();break; case 'F':F_ausgabe();break; case 'G':G_ausgabe();break; case 'H':H_ausgabe();break; case 'I':I_ausgabe();break; case 'J':J_ausgabe();break; case 'K':K_ausgabe();break; case 'L':L_ausgabe();break; case 'M':M_ausgabe();break; case 'N':N_ausgabe();break; case 'O':O_ausgabe();break; case 'P':P_ausgabe();break; case 'Q':Q_ausgabe();break; case 'R':R_ausgabe();break; case 'S':S_ausgabe();break; case 'T':T_ausgabe();break; case 'U':U_ausgabe();break; case 'V':V_ausgabe();break; case 'W':W_ausgabe();break; case 'X':X_ausgabe();break; case 'Y':Y_ausgabe();break; case 'Z':Z_ausgabe();break; } } int A_ausgabe(){ char stringA[]="AAAAAAAAAAA"; char A[11]; i++; zeichen_lesen(); // geht noch weiter mit den funktionen
-
Gimmli schrieb:
hab die for schleife allerdings weggeslassen die brauche ich ned !
Wieso das? Die ist auf jeden Fall besser als deine Rekursion.
-
'for' loop initial declaration used outside C99 mode
spukt mir der compiler mit der schleife aus!
-
Du darfst nach dem alten Standards (C89 bzw. C90) Variablen nicht innerhalb der Schleife deklarieren. Das geht nur im aktuellen Standard C99.
// Variante in C89/90 void func(void){ int i; // ... for(i=0; i<foo; i++){ // ... } } // Variante in C99 void func(void){ // ... for(int i=0; i<foo; i++){ // ... } }
(selbstverständlich ist die C89-Variante auch in C99 gültig)
Zur Lösung des Problems kannst du entweder den Code so umbauen, dass er der C89-Variante genügt, oder deinen Compiler in den C99-Modus schalten (C99 unterstützt er wohl, sonst sähe die Warnung ja anders aus). Beim gcc/MinGW geht das z.B. mit -std=c99.
-
hmmm.... schleife funktioniert noch immer nicht
ich benutze Dev-Cpp wo soll ich das auf C99 umstellen?!?!
Hier nochmal der code so wie ich ihn jetzt habe(noch mit while schleife):
//.. int zeichen_lesen(){ char zeichen; while(i<=100){ zeichen = toupper(string[i]); i++; switch (zeichen){ case 'A':A_ausgabe();break; case 'B':B_ausgabe();break; case 'C':C_ausgabe();break; case 'D':D_ausgabe();break; case 'E':E_ausgabe();break; case 'F':F_ausgabe();break; case 'G':G_ausgabe();break; //..
auserdem bekomme ich diesen fehler:
[Warning] implicit declaration of function `A_ausgabe' [Warning] implicit declaration of function `B_ausgabe' ...
PROGRAMM FUNZT JETZT VOLL!!!! zwar mit while schleife aber ja .... so ist es jetzt einsatz bereit1 DANKE FÜR EURE HILFE!!!!!!!!!!
-
Vielleicht solltest du die Funktionen A_ausgabe() etc mal vor der main() deklarieren (Stichwort: Prototyp), dann muß der Compiler nicht raten, womit er es zu tun hat.