J'ai essayé d'écrire ce programme et que cela ne fait pas ce qu'il est censé, et j'ai cherché des solutions en ligne mais je ne peux pas comprendre ce qui ne va pas, pouvez-vous me donner une main? (Le programme est en portugais, car je le faisais dans ma langue mais c'est tout à fait compréhensible.
L'exercice est: Écrire un programme qui vous permet d'indiquer, d'un Nombre déterminé d'heures, quels minutes, secondes, ou même les dixièmes d'une seconde, que ce nombre d'heures Contient à l'aide d'un commutateur. P>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int h,m,s,ds;
printf("Introduza o nr de horas:\n");
scanf( "%d" , &h);
m = h*60;
s = h*60*60;
ds = h*60*60*10;
scanf( "%d%d%d" , &m, &s, &ds);
switch (h)
{
case 'a' : printf(" Tem: %d minutos" , m);
case 'b' : printf(" Tem: %d segundos" , s);
case 'c' : printf(" Tem: %d decimos de segundo" , ds);
default : printf("Medida incorreta");
}
}
3 Réponses :
Je ne sais pas quelle est la sortie que vous obtenez et ce que vous attendez dans la sortie, mais en consultant votre code, il y a par exemple p> Quelle instruction rupture est-ce qu'elle arrête les autres cas à exécuter p> p> casse code> après chaque cas code>
dans EXAPMLE fourni, vous calculez d'abord des valeurs pour seconde - note que vous utilisez des littéraux en caractères dans des déclarations de cas, c'est-à-dire «A», 'B', 'c', au lieu d'entier, c'est-à-dire 1, 2, 3, malgré cette variable Tout d'abord, c'est une bonne idée de décider - quelles valeurs doivent être dans M code>, s code> et ds code> de la valeur de h code>, puis attribuer des nouvelles valeurs (écraser) de nouvelles valeurs au sein de Scanf (). P>
h code> stocke entier. p>
m code>, s code> et DS code> variables - calculé de h ou entré par l'utilisateur. P>
Scanf ("% D% d% d", & Var1, & Var2, & Var3) code> ne produira aucune erreur si les entrées sont séparées par un caractère d'espacement.
Vous avez besoin de plus de compréhension des déclarations de cas de commutation.
Les états de cas d'interrupteur n'exécutent pas le bloc de code après la déclaration de cas. Il saute juste à la bonne déclaration.
Après avoir exécuté le bloc de code après la déclaration de cas, il exécute simplement le code ci-dessous - Ignorer toute autre Déclarations de cas. P>
Donc, si vous souhaitez vous arrêter avant la déclaration de cas suivante, vous devez utiliser Break Strort>, qui brisera l'instruction de commutation. (Sortez de l'instruction Switch) P> En conséquence, votre code serait comme ça. P> #include <stdio.h>
#include <stdlib.h>
int main()
{
int h,m,s,ds;
printf("Introduza o nr de horas:\n");
scanf( "%d" , &h);
m = h*60;
s = h*60*60;
ds = h*60*60*10;
scanf( "%d%d%d" , &m, &s, &ds);
switch (h)
{
case 'a' :
{
printf(" Tem: %d minutos" , m);
break;
}
case 'b' :
{
printf(" Tem: %d segundos" , s);
break;
}
case 'c' :
{
printf(" Tem: %d decimos de segundo" , ds);
break;
}
default :
{
printf("Medida incorreta");
break;
}
}
}
Utilisation des crochets {} code> dans les cas dans Switch code> n'est pas nécessaire et je pense que le code est encombrant.
@Gamalothman Utilisation des crochets {} Code> Dans les instructions de cas de commutation permet une déclaration de variable dans le bloc de code. Sans cela, nous ne pouvons pas déclarer des variables.
Mais ici, vous ne déclarez rien. Si c'est votre style, vous êtes libre de le garder mais je vois cela déroutant. Aussi, des réponses sur cette question << A HREF = "https://stackoverflow.com/questions/4241545/c-switch -case-curly-braces-aever-every-every-every-every-Case" Titre = "Chantit Coulacement des bretelles frisées après chaque Case "> Stackoverflow.com/Questtions/4241545/... > dire qu'il n'est pas recommandé.
Il suffit de deviner, mais vous devez mettre
pause; code> s à la fin de chaque cascode>. Mais sans savoir ce que «c'est censé faire et ce qu'il fait à la place, il est difficile de répondre.Vous ignorez également la valeur de retour de
scanf () code>, vous n'avez donc aucune idée de ce que vous lisez réellement.Quoi qu'il en soit, bienvenue. Veuillez prendre du temps pour lire la page d'aide, en particulier les sections nommées "Quels sujets puis-je poser des questions ici?" et < Un href = "http://stackoverflow.com/help/dont-ask"> "Quels types de questions dois-je éviter de demander?" . Et plus important encore, veuillez lire La liste de contrôle de la pile sur le débordement . Vous voudrez peut-être aussi en savoir plus sur Exemples minimes, complets et vérifiables .
Veuillez préciser ce qui ne va pas, les entrées qui doivent être transmises au programme, aux sorties attendues et aux sorties réelles. Et au moins commencer par permettre à tous les avertissements de votre compilateur (par exemple,
-wall -wextra -werror code> sur gcc), pour obtenir débarrassé de toutes les constructions suspectes avant même de l'exécuter .Et quel est le point de votre deuxième
scanf () code>?scanf ("% d% d% d", & m, & s, & ds); code> peut écraser les valeurs dem code>,s code>, et < Code> DS code> que vous venez de définir.Je pense que le problème devrait être: entrez tout nombre de points flottants d'heures (ex: 6.11) et émettez le nombre de minutes, secondes, .... De cette façon, je pense que nous ne pouvons pas implémenter code> commutateur code> car il s'attend à un
int code> pasfloat code>.