J'ai donc voulu écrire un programme qui imprime une pyramide en "O", dont la hauteur est donnée par l'entrée de l'utilisateur.
#include <stdio.h> int main() { int n, i, j, k; scanf_s("%d", &n); { for (i = 1; i <= n; i++) { for (j = 1; j <= n - i; j++) { printf(" "); } for (k = 1; k <= 2 * i - 1; k = k + 1); { printf("O"); } printf("\n"); } return 0; } }
Je suis un débutant complet, donc si vous avez des conseils, n'hésitez pas à les offrir. Quoi qu'il en soit, j'ai essayé de l'exécuter sur un compilateur sur Android; semblait fonctionner, imprimé la pyramide.
Je l'ai essayé sur Microsoft Visual Studio. La ligne de commande s'ouvre, mais après avoir mis le numéro et appuyé sur "Entrée", toute la fenêtre se ferme sans rien me donner. Comment éviter cela? Les programmes qui n'ont pas besoin de l'intervention de l'utilisateur semblent fonctionner correctement.
4 Réponses :
Pour le problème que vous avez décrit: empêcher la fenêtre de la console de se fermer sur l'application console Visual Studio C / C ++
Pour votre code, il semble y avoir une erreur, et actuellement votre code ne produira pas de pyramide, mais une barre oblique de O
Pour résoudre ce problème:
for (k = 1; k <= 2 * i - 1; k = k + 1);
supprimer le ;
de cette ligne. Pourquoi cela a résolu le problème?
Quand il y a un ;
après la boucle, cela signifie que la boucle ne fait rien, puis les trois lignes suivantes sont:
{ printf("O"); }
Ce qui signifie qu'il n'y a qu'un seul O
imprime, au lieu de l'imprimer en boucle.
Cette erreur n'empêchera cependant pas une sorte de sortie - un 'O'
sur chaque ligne. ... toute la fenêtre se ferme sans rien me donner
Le programme imprime n
lignes, chacune avec un 'O'
avec des espaces de début. Cela ne répond pas à la question, bien que ce soit une faute.
@WeatherVane J'ai manqué la question, réponse corrigée. Merci!
Mis à part le point-virgule après la boucle for (k = 1...
, vous n'avez pas de bogue dans ce code; si Visual Studio se ferme, le problème vient de ce programme (il pourrait bien se fermer car le programme a terminé son exécution, mais je ne connais pas ce programme).
Puisque vous écrivez que vous êtes un débutant complet et que vous apprécierez des conseils, je vais vous proposer quelques commentaires stylistiques. Mais ce ne sont que des commentaires sur la façon dont je ferais les choses différemment si j'étais vous, je ne dis pas que ce que vous avez est faux.
for (dex = 0 ; dex < max_val ; dex++)
vous servira bien. Notez bien que la comparaison est "dex <max_val" et non "dex <= max_val"Merci pour le conseil. J'ai écrit k = k + 1, car je pensais que le raccourcissement n'était peut-être pas autorisé dans l'instance ou dans qc. A propos de scanf, je n'ai pas vraiment compris pourquoi, mais Visual Studio m'a dit de ne pas utiliser "scanf" normal mais d'utiliser à la place scanf_s, sinon le programme ne se lancera pas. Pourriez-vous expliquer pourquoi?
Désolé, je n'ai aucune idée. Si Microsoft prend en charge scanf (), je l'utiliserais simplement pour que le code soit portable (c'est-à-dire qu'il s'exécute n'importe où). Mais mes antécédents sont tous les systèmes et le codage intégré, donc je n'ai jamais eu à utiliser Windows comme environnement de développement. Lorsque j'écris du code à la maison, j'écris sur une machine virtuelle Linux hébergée sur mon ordinateur Windows (en utilisant VirtualBox - un programme gratuit).
@ChinguunErdenebadrakh, veuillez lire ceci . Quant à savoir pourquoi Microsoft vous avertit de l'utilisation des fonctions standard de la bibliothèque C, vous devrez leur demander. MSVC prend en charge scanf
mais ils pensent que vous ne devriez pas l'utiliser.
Une fois que l'application console revient de la méthode principale, la fenêtre console associée se ferme automatiquement. Pour le système d'exploitation Windows, ajoutez un system("pause");
avant votre return 0;
déclaration. Pour une solution indépendante de la plate-forme, vous pouvez simplement afficher une invite à l'utilisateur et attendre une pression sur une touche avant de revenir de main. Tout caractère restant dans la mémoire tampon d'entrée (entrée à partir de scanf dans ce cas) doit être effacé.
int main() { ......... ......... //clear input buffer int d; while ((d = getchar()) != '\n' && d != EOF) { } printf("Press ENTER key to Continue\n"); getchar(); return 0; }
Vous devez inclure le fichier d'en-tête conio.h dans votre programme, puis placer simplement getch (); après la dernière déclaration de cout de votre programme.
Je pense que cela aiderait la fenêtre à la fermer a fonctionné pour moi;)
Ajoutez
getchar()
juste avant dereturn 0;
La balise C ++ ne semble pas pertinente ici. Utilisez-vous C ou C ++?
@ girouette comment insérez-vous exactement cela? Le simple fait de taper cela avant le retour 0 ne fonctionnera pas, non?
toutes ces réponses sont très hacky à mon avis. Ouvrez simplement une fenêtre CMD distincte, accédez à l'emplacement de votre exécutable et exécutez le programme via la ligne de commande.