Clanintern Clanintern Clanintern

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ückgabewert

ok 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.