Instruction Switch avec des cordes?
Je suis en train de travailler sur un petit devoir à la maison et je suis censé faire un menu de nourriture. De toute façon, mon interrupteur ne fonctionne pas. Je suis en train d'utiliser une fonction simple que je peux passer une valeur de "poisson", "boire", ou "chips" et alors il sera de sortie:
"Are you ordering FISH?" (or chips/drink)
Je ne peux pas obtenir le commutateur de travailler, il est censé détecter ce que je passe, et ensuite à la sortie d'un printf basé sur le commutateur cas.
CODE:
#include <stdio.h>
void menu() {
printf("\nWelcome to Sunny FISH & CHIPS!\n\n");
printf("######## Fish : Haddock(K) Large(L) | $5.00\n");
printf("# FOOD # Halibut(T) Large(L) | $4.00\n");
printf("######## Chips: Cut(C) Large(L) | $2.00\n");
printf(" Ring(R) Large(L) | $3.00\n");
printf(" | \n");
printf("########## Soft Drinks(S) Large(L) | $2.00\n");
printf("# DRINKS # Coffee(C) Large(L) | $1.75\n");
printf("########## Tea(T) Large(L) | $1.50\n");
printf("---------------------------------------------\n");
printf("Note: Medium price: 80%% of large.\n");
printf(" Small price: 60%% of large.\n");
printf("TAX is 10%%.\n");
printf("More than 5 fish, 10%% discount on drink.\n");
printf("Every 10 fish purchased, get 1 free softdrink.\n");
printf(" - size of drink is according to size of fish\n");
}
void question (char choice[5]) {
switch (choice[5])
{
case choice["fish"]:
printf("Do you order FISH?\n");
case choice["drink"]:
printf("Do you order CHIPS?\n");
case choice["chips"] :
printf("Do you order DRINKS?\n");
default :
printf("Enter a valid choice: \n");
}
}
main() {
//menu();
question("fish");
}
OriginalL'auteur eveo | 2012-03-24
Vous devez vous connecter pour publier un commentaire.
En plus des autres réponses, si vous trouvez que votre liste de choix commencent toutes par une seule lettre (ou qui ont une unique lettre dans une autre position), alors vous pouvez
switch
sur cette lettre:Ce sera plus rapide que d'utiliser
strcmp
(bien qu'il n'a pas d'importance pour votre cas), et est moins facile à gérer. Toutefois, il est bon de connaître toutes les options et à comprendre comment vous pouvez utiliser certaines de ces choses.strcmp
à assurez-vous que la chaîne fait des matchs.Comme je l'ai dit, cela ne fonctionnera correctement que si chaque choix a une unique lettre dans une certaine position.
C'est une question distincte. Mon point est que votre solution sera également accepter d'autres chaînes qui commencent par la même lettre, mais qui ne sont pas dans la liste.
oui c'est vrai, ma réponse présuppose que l'entrée est valide.
Oui. Et mon but, en commentant est de dire que votre réponse est toujours bon, même si vous ne pouvez pas supposer que, aussi longtemps que vous ajoutez
strcmp
vérifie dans le cas (c'est toujours plus efficace qu'une recherche linéaire des réponses valides avec unstrcmp
contre chacun).OriginalL'auteur Seth Carnegie
C ne pas en charge ce type de switch, mais si il serait, la syntaxe serait être
Un interrupteur pour moi, c'est souvent plus clair qu'une (longue) liste des if - else fi. Même si dans ce cas il semble trop compliqué, je serait préfèrent des approches comme ceci:
Si vous choisissez correctement l'approche, votre code puisse être toujours le même et que vos données croître.
OriginalL'auteur ShinTakezou
Vous ne pouvez pas utiliser
switch
déclaration avec des chaînes.Vous pouvez envisager d'utiliser
strcmp
pour comparer des chaînes de caractères.OriginalL'auteur Manlio
C ne prend pas en charge les commutateurs sur les cordes...vous devez utiliser
strcmp()
OriginalL'auteur prelic
switch
ne fonctionne pas comme ça en C. Vous aurez besoin de faire unif
déclaration de construire et d'utiliser desstrcmp()
pour comparer des chaînes de caractères.OriginalL'auteur Carl Norum