J'ai un programme de base C qui produit un numéro et que l'utilisateur doit le deviner (yup, vous l'avez déjà appelé: devoirs). Je suis capable de m'avoir tout ce que je suis un peu fier, mais j'ouvre des erreurs que j'ai faites bien sûr que j'apprends toujours. Mes deux principales questions sont
J'essaie de programmer de mieux que je peux :) p>
6 Réponses :
Utilisez l'instruction Essayez quelque chose comme ceci: p> BREAK CODE> PARTOIR SUR UNE BOUCLE: Dans ce cas, cela peut ne pas être ce que vous voulez, car une fois que vous avez rompu de la boucle, vous voyez instantanément le message "Vous perdez" . Vous devrez peut-être restructurer votre programme pour cela.
Vous ne devriez pas publier des programmes modifiés complètes en réponse aux questions de devoirs. Même si l'affiche apprend le matériau sans appliquer la réponse donnée, l'affiche pourrait toujours avoir des problèmes pour que quelqu'un leur ait montré une réponse complète.
Vous recherchez la commande Cette ressource semble être très utile pour vous. p> comme une note latérale: votre texte "vous perdez" sera toujours affiché quoi que ce soit. Vous voudrez peut-être évaluer cela à l'intérieur de la boucle DO {}. P> Toujours une pas en avant de moi avec les messages / modifications de cette réponse Andrew Hare! P> P> break code>.
Pour la boucle ne devrait pas être utilisé dans la situation est la bonne réponse. Tandis que quelque chose est le bon moyen de gérer cela.
Dans le cas de votre programme, le meilleur moyen d'y parvenir est probablement d'appeler p>
sortie vide (statut int); p>
(inclure stdlib.h) p>
après l'impression "Vous gagnez" p>
En général, vous pouvez utiliser le mot-clé "Break" pour quitter une boucle à tout moment. Cela n'a pas l'effet souhaité dans votre cas car il irait à imprimer "tu perds ...". Si vous souhaitez utiliser "Break", vous devriez mettre une déclaration "si" autour de "vous perdez ..." et vérifiez si l'utilisateur n'a pas gagné. P>
Je n'aime pas beaucoup en utilisant sortie () code> pour quitter le programme; J'avais personnellement réserver son utilisation pour des erreurs mortelles. Dans cet exemple, il est trivial d'utiliser une «pause» à la place ou de modifier la condition de même si cela a également été suggéré.
Pourquoi ne pas définir la condition de même si la condition de l'utilisateur? Quelque chose comme:
Il serait préférable d'utiliser la pause car l'intention du code serait plus apparente.
Tu penses? Je pense que finner le moment est plus apparent. C'est comme dire "Je vais continuer à demander jusqu'à ce que tu tiens à bien le faire ou à perdre des chances". Avoir une pause, il semble que une erreur soit survenue ou quelque chose de plus important a besoin d'attention ...
Je serais en désaccord. Dans ce cas, on peut le voir entrer dans la boucle quand il se terminera. Utilisation de la pause, il faut lire pour passer par le code pour savoir que.
Les déclarations de pause ont tendance à obscurcir la logique de terminaison d'une boucle. Imaginez essayer de déduire toute la logique d'une très grande boucle avec des instructions de pause dispersées dans tout le monde où la logique d'extrémité peut être trouvée en haut ou en bas (en fonction du type de boucle).
Voici trois possibilités. Lisez-les à leur sujet !!! (GOTO considéré comme nocif)
Et dans certains contextes renvoie quelque_value; code> aussi.
Je ne vois pas d'erreurs "évidentes" que les affiches précédentes n'aient pas mentionnées, autres que le fait que, avec la pause, vous n'avez plus besoin de "i" et "Numguess" comme ils auraient toujours la même valeur. Il suffit d'utiliser Numguess au lieu de "I" dans la condition de Why. P>
Mais je voudrais vous recommander vivement de rendre votre code plus lisible - le meilleur moment pour entrer dans l'habitude d'un bon style de codage est maintenant, avant d'acquérir et de solidifier les mauvaises habitudes. P>
Utilisez toujours des identificateurs auto-décrivant (noms variables / fonction). Par exemple. Votre "X" devrait vraiment être appelé "MAXGUESSES". P> li>
Ne lésinez pas sur l'espace blanc. Par exemple. "} tandis que (je Vous semblez avoir déjà eu l'habitude de ne pas enchanger de commentaires - bon !!! p>
N'oubliez pas que les commentaires doivent toujours décrire le but de ce que le code fait au lieu de la mécanique de la manière dont il le fait, à moins que la mécanique soit si délicate et intelligente qu'elle a également besoin d'une explication. P>
li>
ul>
La raison pour laquelle cela est important est deux fois: p>
80-90% du temps de développement / efforts sont généralement consacrés à la maintenance du code existant, à votre propre ou à quelqu'un d'autre. Cette tâche est très facile avec un code bien documenté et facilement lisible. (Vous n'avez aucune idée de la perte de cérébrité de quelqu'un qui peut supporter de la lecture d'un code inconnu à 2 heures du matin pendant le problème de production, simplement parce que le Bozo qui l'a écrit n'a pas tiré le code de manière cohérente). P>
li>
Avoir un code bien documenté et lisible facilite la rédaction de vous de l'écrire, car il clarifie vos propres pensées et décourage des bogues typos stupides ("OUPS, je voulais utiliser X au lieu de y"). < / p>
li>
ul>
Vous avez enseigné la structure du programme de base, faire / tandis que les boucles, io, sscanf, rand, semant le rng, mais pas
pause code>?Agréable de voir que vous avez commenté votre code - bien fait: D
Pourquoi avoir deux appels getchar () à la fin, lorsque vous dites que vous voulez seulement 1 touche pour mettre fin au programme?
@Dominic Bou-Samra: Il est toujours à l'école (et a probablement toujours des moyens d'aller); Il cessera de commenter suffisamment de commentaires. XD
Un Nitpik, X% 99 vous donnera un numéro dans la plage 0-98. Vous voulez x% 100. Et un vrai nerd n'aura jamais besoin de 7 devines, 10 est trop trop :-)
Un grand merci à vous tous pour votre aide. Cela a aidé à m'apprendre à utiliser une pause lorsque la boucle devrait s'arrêter (duh !!!!!!) et d'autres points que je suis heureux d'avoir pris la bouche. J'apprécie grandement vous aider :)