Forum
![]() |
Öffentliche Foren |
FORUM: Spiele & Computer THEMA: charakter in c einlesen | |
AUTOR | BEITRAG |
Earth
RANG Deckschrubber |
#1 - 18.11 14:48 Hi,habe folgendes Problem in c: Ich will mit scanf eine char variable einlesen und dann mit hilfe einer If-Schleife eine Bestimmte anweisung starten: habe das folgendermaßen gemacht: char r; printf("Rechenart eingeben:"); scanf("%c",'r'); if('r' != '+'){ printf("Falsche Eingabe bei der Grundrechenart!"); //Programmende } Beim Ausführen überspringt er mir jedes mal die Eingabe wo ich die Grundrechenart +-*/ eingebe und zeigt immer "Falsche Eingabe bei der Grundrechenart!" an. Was ist falsch? btw. kann mir jemand den Befehl in c fürs beenden eins programmes sagen? |
h¥pertex
RANG Deckschrubber |
#2 - 18.11 14:51 'r' wird immer ungleich '+' sein, da r nicht das gleiche wie + ist ;)lass mal die '' um die r weg. |
Huri-Kane
RANG Deckschrubber |
#3 - 18.11 16:03 zum beenden: "return 0" (oder eine zahl mit jeweiligem rückgabewert) irgendwo in die main-methode schreiben |
Earth
RANG Deckschrubber |
#4 - 18.11 16:13 Was meinst denn mit Zahl mit jeweiligen Rückgabewertok habe jetzt beim r diese dinger hier ' weggelassen, aber es funktioniert nicht. Wiegesagt er überspringt sozusagen die Eingabe bei scanf, also ich werd nicht aufgefordert das dementsprechende Zeichen einzugeben. |
h¥pertex
RANG Deckschrubber |
#5 - 18.11 19:07 in der regel wird dein rückgabewert 0 sein.du hast die '' aber schon bei beiden r weggelassen? schau mal hier, da ist ein beispiel, und ne erklärung zu scanf: http://www.cplusplus.com/reference/clibrary/cstdio/scanf.html |
Earth
RANG Deckschrubber |
#6 - 18.11 19:34 das ist englisch das versteh ich dann schon gleich zweimal nicht...Und ich hab jetzt bei allen r diese ' wegggelassen und es funktioniert immer noch nicht. Wenn ich also mein Programm ausführe überspringt er sozusagen die eingabe von der Rechenart, ich kann gar nix eingeben! |
DoomTheBrain
RANG Hardcore Sucker |
#7 - 18.11 23:07 wenn das die main mehtode ist schreib bei porgramm ende noch return 0 hin.und die if schleife müsste maeiner meinung nach so aussehen if (!= "+") { |
Morath
RANG Deckschrubber |
#8 - 19.11 08:51 scanf braucht einen Zeiger auf eine Variable, in der es den eingegebenen Wert ablegen kann. Statt r musst du also &r an die Funktion übergeben.Die Bedingung beim if-Block (wtf is ne "if-Schleife"? Oo) muss dann r != '+' lauten, dann wird richtig verglichen. Ein Programmende bei c ist, wie #3 schon richtig schreibt ein return in der main-Funktion. Der zurückgegebene Wert stell dann den exitcode des Prozesses dar, in dem dein Programm lief. 0 bedeutet üblicherweise "alles ok", während ein Wert ungleich 0 irgendeinen Fehler anzeigen soll. Normalerweise sind die returncodes in irgendeinem header schon vordefiniert (gibts ne system.h? Bin etwas eingerostet was c angeht), da benutzt du am besten diese Konstanten. Natürlich muss die main-Funktion dann auch mit einem int als rückgabetyp deklariert sein, also int main(int argc, char** argv) { ... } p.s.: nochn Tip am Rande #1, wenn du programmieren lernen willst, vor allem c, führt wahrscheinlich kein Weg an fundierten Englischkenntnissen vorbei. Ein großer Teil der guten Literatur zu c ist nämlich in Englisch geschrieben und bei ner Übersetzung kann man sich nie sicher sein, ob der Übersetzer nicht ein paar konfuse Wortneuschöpfugnen eingebaut hat :-) |
Earth
RANG Deckschrubber |
#9 - 23.11 15:27 lasst euch mal das folgende c-Programm vom kompiler übersetzen und versucht es mal... Ist das bei euch auch so dass er die eingabe von scanf("%c",&r); überspringt? Warum ist das so?----------------------------------------------------------------------- #include <stdio.h> #include <math.h> int main(){ int z1,n1,z2,n2,EZ,EN; float ER; char r; printf("Zaehler der ersten Zahl eingeben:"); scanf("%d",&z1); printf("Nenner der ersten Zahl eingeben:"); scanf("%d",&n1); printf("Zaehler der zweiten Zahl eingeben:"); scanf("%d",&z2); printf("Nenner der zweiten Zahl eingeben:"); scanf("%d",&n2); printf("Rechenart eingeben:"); scanf("%c",&r); if(r!='+' && r!='-' && r!='*' && r!='/'){ printf("Ungueltige Rechenart!"); return 0; } if((n1==0 || n2==0) && r!='/'){ printf("Nenner muessen bei +,- und * ungleich 0 sein!"); return 0; } if(r=='/' && z2==0 && n1!=0){ printf("Zaehler der zweiten Zahl muss bei einer Division ungleich 0 sein!"); return 0; } if(r=='/' && z2!=0 && n1==0){ printf("Nenner der ersten Zahl muss ungleich 0 sein!"); return 0; } if(r=='/' && z2==0 && n1==0){ printf("Nenner der ersten Zahl muss ungleich 0 sein. Bei einer Division muss zugleich der Zaehler der zweiten Zahl ungleich 0 sein!"); return 0; } if(r=='+'){ //Addition EZ = z1 * n2 + z2 * n1; EN = n1 * n2; } if(r=='-'){ //Subtraktion EZ = z1 * n2 - z2 * n1; EN = n1 * n2; } if(r=='*'){ //Multiplikation EZ = z1 * z2; EN = n1 * n2; } if(r=='/'){ //Division EZ = z1 * n2; EN = n1 * z2; } ER = (float)EZ/(float)EN; printf("(%d/%d) %c (%d/%d) = (%d/%d) = %.2f\n",z1,n1,r,z2,n2,EZ,EN,ER); return 0; } ----------------------------------------------------------------------- |
Shaker
RANG Godlike |
#10 - 23.11 20:44 weil die eingabetaste ebenfalls ein character ist und enter (oder ein anderes zeichen) noch im puffer steht..also entweder den puffer mit fflush() leeren, mit %s nen string einlesen oder ganz anders einlesen (mit fgets zum bsp) |
Crush (Anti Däääh)
RANG Master of Clanintern |
#11 - 23.11 22:51 Tipp: So lange scanf aufrufen, bis die Variable einen Wert hat den du gebrauchen kannst. So leerst du den Eingabepuffer von unsinnigen Zeichen und filterst gleichzeitig falsche Eingaben. |