Funktion lower mit bedingten Ausdrücken
-
Dann bekomm ich aber wieder den "Invalid Indirection"-Fehler bei der Ausgabezeile mit Ergebnis.
hmmmm... ich checke das Ganze nochmal durch !
also ich hab das mal angeglichen, damit überall die gleichen Ergebnisse stehen, aber es gibt dann zwar keinen Fehler vom Compiler, aber vom OS wegen der Speicheradresse.
#include <stdio.h> #define SIZE 1 int lower (char c); int main(int argc, char* argv[]) { int x; char eingabe1[SIZE], Ergebnis[SIZE]; // Hier nur Ergebnis!!! // printf("Eingabe 1:\n"); gets(eingabe1); Ergebnis[x] = lower(eingabe1[SIZE-1]); // hier auch!!! // for(x = 0; x <= (SIZE-1); x++) { printf("Das Ergebnis ist %c\n", Ergebnis[x]); // und hier aufeinmal Ergebnis[x]!!!!!// } return 0; } int lower (char c) { if (c >= 'A' && c <= 'Z') return c + 'a' - 'A'; else return c; }
-
just in work!!!
-
So compilieren lässt er sich schon mal, aber ich bekomme bei Ergebnis nur das allererste Zeichen klein dargestellt.
Wenn ich mehr Zeichen eingebe, ignoriert dies das Programm und gibt nichts weiter aus !
-
Na dann sag doch dass er mehr zeichen in klein umwandeln soll und nicht nur eins!!!!
Ich ging von deinem Quelltext aus!!!
-
also wenn ich die SIZE verändere, passiert folgendes:
Anstatt dass ich mehr Zeichen verkleinere, wird erst ab der Position mit der Ausgabe der verkleinerten Zeichen begonnen, an der der maximale define steht.Dies bedeutet im Klartext.
Eingabe 1 = ABCD
Fall 1 mit #define SIZE 1 - Ausgabe aFall 2 mit #define SIZE 2 - Ausgabe b
Fall 3 mit #define SIZE 3 - Ausgabe c
Fall 4 mit #define SIZE 4 - Ausgabe d
Es wird aber nur das eine Zeichen ausgegeben und nicht die anderen !!!
-
OHNE WORTE!!!
#include <stdio.h> #define SIZE 10 int lower (char c); int main(int argc, char* argv[]) { int x; char eingabe1[SIZE], Ergebnis[SIZE]; for(x=0;x<=(SIZE-1);x++) { eingabe1[x]=' '; Ergebnis[x]=' '; } printf("Eingabe 1:\n"); fgets(eingabe1,SIZE,stdin); for(x=0;x<=(SIZE-1);x++) { Ergebnis[x] = lower(eingabe1[x]); } printf("Das Ergebnis ist:\n"); for(x = 0; x <= (SIZE-1); x++) { printf("%c", Ergebnis[x]); } return 0; } int lower (char c) { if (c >= 'A' && c <= 'Z') return c + 'a' - 'A'; else return c; }
-
Das ist ja wie das Programm vom letzten mal....
hmmm... ich dachte, dass man da was völlig Neues schreiben mussEs geht auch logischerweise, weil es fast genauso ist, wie das Programm mit den Zeilen !
-
ist klar:
#include <stdio.h> #include <string.h> #define SIZE 20 int lower (char c); int main(int argc, char* argv[]) { int x; char szEingabe[SIZE]; printf("Eingabe 1: "); fgets(szEingabe, SIZE, stdin); // war doch letztes mal schon gesagt, das fgets() viel sicherer ist printf("Das Ergebnis ist "); for(x = 0; x < (int) strlen(szEingabe); x++) { printf("%c", lower(szEingabe[x])); } printf("\n"); return 0; } int lower (char c) { if (c >= 'A' && c <= 'Z') return c + 'a' - 'A'; else return c; }
-
@Horst2: Sehr gut verbessert!!!
-
@hohesC:
War nicht verbessert, war gleichzeitig gepostet
-
Warum schreibste denn
char szEingabe[SIZE];
und nicht ganz normal Eingabe[SIZE] ?
So pfiffig bin ich noch nicht, um auf diese Zeile zu kommen, aber ist schon mal was Neues, was ich in den nächsten Programmen auf jeden Fall testen kann.
for(x = 0; x < (int) strlen(szEingabe); x++)
Ich bis dato noch keine vorgefertigte Funktion bei einem Vergleich eingesetzt.
-
Und ohne lower funktion!
#include <stdio.h> #include <ctype.h> #include <string.h> #define SIZE 20 void main() { int x; char szEingabe[SIZE]; printf("Eingabe 1: "); fgets(szEingabe, SIZE, stdin); printf("Das Ergebnis ist: "); for(x = 0; x < (int) strlen(szEingabe); x++) printf("%c", tolower(szEingabe[x])); }
-
Da sieht das Ganze wesentlich kürzer aus muss ich mal sagen, aber ich muss es leider ja so machen und kann keine Sachen da auslassen, aber ich sehe schon, dass ihr das alles drauf habt.
So ich guck jetzt nur noch mal, wie ich die Funktion von lower mit bedingten Ausdrücken schreiben muss und dann poste ich die Endvariante des Programms.
-
cHillb3rT schrieb:
Warum schreibste denn
char szEingabe[SIZE];
und nicht ganz normal Eingabe[SIZE] ?
Das nennt sich ungarische Notation. Dadurch kann man im Programm leichter erkennen von welchem Datentyp die Variable ist, ohne das man jedes mal die Definition nachschauen muss. sz bedeutet "string zero", als null-terminierter string
cHillb3rT schrieb:
Ich bis dato noch keine vorgefertigte Funktion bei einem Vergleich eingesetzt.
Solltest aber vorgefertigte Funktionen einsetzen, dafür sind sie da und nehmen die viel arbeit ab
-
Na ja es geht noch kürzer:
Hallo Computer mach bitte alle Buchstaben klein die eingegeben werden
@Horst2: für wahre Experten
Sorry, das geht in höhere Mathematik.
-
int lower (char c) { /* Trifft die Bedingung zu, ist c ein Großbuchstabe. In diesem Fall wird der Ausdruck bewertet und lower() liefert einen Kleinbuchstaben. Im anderen Fall liefert die Funktion den Buchstaben unverändert */ return c >= 'A' && c <= 'Z' ? c + 'a' - 'A' : c; }
So das ist nun die Funktion lower mit bedingten Ausdrücken !!!
Endlich geht allesSolltest aber vorgefertigte Funktionen einsetzen, dafür sind sie da und nehmen die viel arbeit ab
Die derzeitigen Aufgabenstellungen verbieten mir es aber das zu tun, ansonsten würde ich es ja machen.
-
int lower (char c) { return c >= 'A' && c <= 'Z' ? c + 32 : c; //Das 'a' - 'A' kannste dir sparen// }
-
'a' - 'A' ist aber klarer und tut nicht weh.
-
Bashar schrieb:
'a' - 'A' ist aber klarer und tut nicht weh.
Ja magst Recht haben, aber ich finde beides verständlich.