Verwenden Sie Schalter mit der Nummer Fall ist, und Fall char
Möchte ich ein switch
Schleife.
Wenn der Eingang wird von 1
zu 5
. Gibt es eine Nummer. Sonst wird es drucken "this is not a number"
. Und wenn die Eingabe 'e'
. Die switch
Schleife beendet werden sollte.
Kann ich die Anzahl Teil, aber ich weiß nicht, wie kann ich machen Eingang mit 'e'
. Es einfach nicht Lesen. Hier ist mein code:
int main() {
int i,a = 0;
printf("Write something:");
scanf("%d", &i);
do{
switch (i)
{
case 1:
printf("1");
break;
case 2:
printf("2");
break;
case 3:
printf("3");
break;
case 4:
printf("4");
break;
case 5:
printf("5");
break;
case 'e':
a=1;
break;
default:
printf("This is not a number”);
break;
}
}while (a==0);}
Mein problem ist das ich nicht haben kann-Eingabe als 'e'
oder jedem char. Denn wenn ich das Tue, werde ich erstellen ein paradox, Schleife oder einfach überhaupt nicht arbeiten. Wo bin ich falsch?
- Warum sind Sie versuchen zu mischen, Zeichen und zahlen in der gleichen (
int
) variable? - Und was für ein Paradoxon-Schleife ist?
- Ich denke, dass mein Anfänger-Fehler. Die übung sagen Sie mir zu tun, Fälle mit zahlen und char 'e'. Also ich habe irgendwie hier verloren, und ich versuche so...
- Wenn ich eine Schleife, die nicht ein Ende haben. Es wird nicht aufhören, bis man alle Speicher. Für mich, mit diesem code: Es hält den Druck "Dies ist keine Zahl" Tausende von Zeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur behandeln die zahlen als Zeichen wie diese;
Durch die Art und Weise, werden Sie wahrscheinlich wollen, zu Lesen, einen neuen Charakter jedes mal durch die while-Schleife, sonst wirst du nicht weiterkommen drucken für immer.
Wenn Sie sagen, 'e', Sie sind wirklich sagen: "Der Wert von 'e'". Dies ist der ASCII-Wert. Der decimal-Wert von 'e' ist eigentlich 101.
Diese Arbeit zu machen, könnten Sie die
char
Datentyp. Lesen Sie die Daten als char-und in deiner switch-Anweisung, statt eine Ziffer, verwenden Sie ein char statt. z.B.scanf("%c", &i);
verwendet werden, wie Sie ändern lediglich die variable der Typ ist nicht genug.%c
und%d
wird nicht nachgeben das gleiche Ergebnis, wenn Sie geben Sie "1". Auch, wie gezeigt, in den edit-log "gelesen, wie ein char" nicht da war zunächst.Können Sie nicht tun dies, weil Sie in Ihrem scanf angeben, dass die Eingabe einer Dezimalzahl (%d).
Wenn Sie möchten, um zu überprüfen, ob es eine Zahl ist oder nicht, muss man sich mit den chars.
zum Beispiel :
Sowas ... Hoffe, dass ich geholfen habe.
getnbr()
soll das sein? Oder der Punkt des endlosenwhile(42)
?char
wie es erwartet einen string alschar *
. Wenn das Ziel war, wiederholen Sie die Schleife, 42 mal das ist nicht, wie es gemacht wird. Es sieht mehr wie eine unendliche Schleife, und in einem solchen Fall sollten Siewhile (1)
oderfor (;;)
statt, die nicht irreführend, dieses Beispiel sieht mehr wie pseudo-code. Pseudo-code ist in Ordnung, aber machen es verständlich.Können Sie Ihre Schalter als
switch(char)
. Konvertieren Sie Ihre Eingabe zuchar
(da es 1 zu 5, kann es ein char). Dann prüfencase '1':
case '2'
etc.Bearbeiten: Sie müssen Ihre Eingabe als char
dann
Andere haben vorgeschlagen, %c, so dass Ihr nicht mischen Zeichen mit Integer-aber Sie müssen vorsichtig sein, mit dem rest des Codes. Sie müssen möglicherweise eine Besetzung für die switch-Anweisung.
EDIT: Karston Koop fragte eine gute Frage. Meine Argumentation für den cast ist einfach, dass die ganze Zahl i ist nicht initialisiert. Das formatierte schreiben von scanf wird nur die Initialisierung des niedrigsten/höchsten (je nach hardware) byte der gesamten 4bytes der integer - den rest konnte gefüllt mit Müll, je nachdem, was auf der 4bytes stack reserviert für die integer-variable i. Wenn es ein char alle bits wäre initialisiert von scanf. Als Ergebnis wünschen wir uns nur das untere/Obere byte für die switch-Anweisung, wie Sie ist und daher die Besetzung. Um dies zu umgehen könnte man nur initilaise i = 0. Dann der cast überflüssig. Ich lasse diese in, wie es vielleicht nützlich sein, um jemanden in die Zukunft. Dank Karston für quizzing, mich auf dieser.
char i;
int
undchar
? Ich sehe nicht, die Darsteller haben keine Wirkung.int
mit%c
falsch ist, zu beginnen mit, und die cast ist nur ein workaround für diesen Fehler.