Utilisation de l'interrupteur avec le numéro de cas et le char cas
Je veux faire une switch
boucle.
Si l'entrée est à partir de 1
à 5
. Il permet d'imprimer un nombre. Il aurait l'impression "this is not a number"
. Et si l'entrée est 'e'
. Le switch
boucle doit être terminé.
Je peux faire le nombre, mais je ne sais pas comment puis-je faire d'entrée avec 'e'
. Il ne veut tout simplement pas lire. Voici mon 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);}
Mon problème est que je ne peux pas avoir d'entrée comme 'e'
ou char. Parce que si je fais ça, je vais créer un paradoxe boucle ou ne pas travailler du tout. Où ai-je tort?
- Pourquoi essayez-vous de mélanger des caractères et des nombres entiers dans le même (
int
) variable? - Et quel paradoxe de la boucle de l'est?
- Je suppose que c'est ma débutant faute. L'exercice me dire de le faire affaires avec des chiffres et des char "e". Donc j'ai un peu perdu ici, et j'essaie comme ça...
- Quand je fais une boucle qui n'a pas de fin. Il ne sera pas arrêter de courir jusqu'à prendre toute la mémoire. Pour moi, avec ce code: Il garde l'impression de "Ce n'est pas un nombre" des milliers de fois.
Vous devez vous connecter pour publier un commentaire.
Suffit simplement de traiter les nombres entiers que des personnages comme cela;
Par le chemin, vous avez probablement envie de lire un nouveau personnage à chaque fois grâce à la boucle while, sinon vous serez coincé impression pour toujours.
Quand vous dites "e", vous êtes en train de dire "La valeur de "e"". C'est la valeur ASCII. La valeur décimale de " e " est en fait 101.
Pour faire ce travail, vous pourriez utiliser le
char
type de données. Lire les données d'un char, et dans votre instruction switch, au lieu d'un chiffre, utilisez un char à la place. par exemple,scanf("%c", &i);
doit être utilisé que de changer simplement le type de la variable n'est pas assez.%c
et%d
ne donneront pas le même résultat si vous tapez "1". Aussi, comme indiqué dans l'édition du journal le "lire comme un char" n'était pas là au départ.Vous ne pouvez pas faire cela parce que, dans votre scanf vous préciser que l'entrée sera un décimal (%d).
Si vous voulez vérifier si c'est un nombre ou non, vous avez à traiter avec les caractères.
par exemple :
Quelque chose comme ça ... j'Espère que j'ai aidé.
getnbr()
censé être? Ou le point de l'infiniwhile(42)
?char
qu'il attend une chaîne de caractères commechar *
. Si l'objectif a été de répéter la boucle de 42 fois ce n'est pas la façon dont c'est fait. Il ressemble plus à une boucle infinie et dans un tel cas, vous devez utiliserwhile (1)
oufor (;;)
à la place qui n'est pas trompeur, cet exemple ressemble plus à de la pseudo-code. Pseudo-code est bien, mais à les rendre compréhensibles.Vous pouvez faire votre switch
switch(char)
. Convertir votre entrée àchar
(puisqu'il est de 1 à 5, il peut être un char). Ensuite, vérifiez lecase '1':
case '2'
etc.Edit: vous avez besoin de prendre votre entrée comme un char
puis
D'autres ont suggéré l'utilisation de %c de manière à ce que votre mélange de caractères avec des entiers, mais vous devez être prudent avec le reste du code. Vous pouvez avoir besoin d'un plâtre pour l'instruction switch.
EDIT: Karston Koop posé une bonne question. Mon raisonnement pour le casting est tout simplement que l'entier i n'est pas initialisé. La mise en forme des écrire à partir de la scanf ne permet d'initialiser le plus bas/plus haut (en fonction du matériel) octet de l'ensemble de 4 octets de l'entier - le reste pourrait être rempli avec les ordures ménagères, selon ce qui est sur les 4 octets de la pile réservé à la variable de type entier je. Si c'était un char de tous les bits ne sont initialisées par scanf. En conséquence, nous ne souhaitons inférieure/supérieure octet de l'instruction switch est et donc la fonte. Pour contourner ce problème, vous pourriez juste initilaise i = 0. Puis le casting devient superflu. Je vais laisser cela peut-être utile à quelqu'un dans le futur. Grâce à Karston pour les questionnaires moi sur ce point.
char i;
int
etchar
? Je ne vois pas le cast avoir aucun effet.int
avec%c
est mauvais pour commencer, et le casting est juste une solution de contournement de cette erreur.