cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006
-
18 déc. 2004 à 18:03
cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006
-
19 déc. 2004 à 21:56
Bonjour à tous,
Je suis étudiant en première année d'une école d'ingénieur (premier cycle hein donc première année sur cinq ;) ) et j'aurai quelques questions à vous poser sur le langage C que je ne maitrise pas totalement.
Pour info, on vient juste de voir les tableaux alors me sortait pas des trucs de ouf, je ne les comprendrai pas ;)
Pour info, je code sous Win2K avec Dev-Cpp
Alors j'ai un petit jeu de reversi à faire, et avant même de rentrer dans la programmation du dit jeu, j'aimerai créer un menu pour savoir ce que l'utilisateur veut faire... Voici mes questions:
1) Est-il possible de centrer un texte qu'on fait apparaitre avec printf excepté en jouant avec les espaces ?
2) J'aimerai faire une selection de l'utilisateur du genre: Votre choix [choix] limité à un seul caractère. Malheureusement, scanf ne peut controler que si la saisie correspond bien au type de variable déclaré au début du prog. Or, ce que j'aimerai, c'est que l'utilisateur ne puisse saisir qu'une seule lettre et si possible ne pas avoir à appuyer sur la touche enter pour confirmer son choix.
Ce qui donnerai ex: Votre choix [3] et paf ça enchaine. C'est possible ca sans que ça soit trop compliqué ?
Je vous tiendrai au courant de mes avancées et je continuerai à poser mes questions sur ce topic. J'espère seulement qu'il y a des arrachés du C ici ;)
yserver
Messages postés203Date d'inscriptionlundi 2 août 2004StatutMembreDernière intervention 8 septembre 2006 18 déc. 2004 à 19:16
Salut
pour ta question 1 je crois pas qu'il soit possible de faire autrement avec printf
pour la question 2 y a la commande getchar () qui repond parfaitement a tes besoin
pour la question 3 je sais pas
cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006 18 déc. 2004 à 19:32
Et comment fonctionne cette commande getchar () ?
A l'heure actuelle j'ai ca comme ligne de choix:
printf("Votre choix []");
Je suppose qu'il y a quelque chose à ajouter avant ou après ou même dans cette commande...
Merci de ton aide en tout cas, en attendant une réponse, je vais fouiner sur google.
cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006 18 déc. 2004 à 19:41
Hum j'ai trouvé comment utiliser getchar mais je ne pense pas que cela convienne puisque il ne limite pas le nombre de caractères ou alors c'est que je n'ai pas compris l'exemple qu'on me donne...
Je continu à fouiner...
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006 18 déc. 2004 à 20:43
Voici mon code à l'heure actuelle pour le menu.
Je rappelle que je voudrais:
1) Centrer le menu selon l'affichage en cours (que ce soit fenetré ou en full screen)
2) Que l'utilisateur ne puisse saisir qu'un seul caractère et que le pc gère la réponse automatiquement sans valider la saisie (mais ca c po le plus important)
Mon code:
#include <stdio.h>
// MENU
int menu()
{
char e_grave,e_aigu,a_grave,i_cir,beep;
int choice,test[1];
e_aigu=138;
e_grave=130;
a_grave=133;
i_cir=140;
beep=7;
do
{
system("cls");
printf("-----------------------------\n");
printf("| REVERSI |\n");
printf("-----------------------------\n");
printf("1) Jouer %c deux\n",a_grave);
printf("2) Jouer contre l'ordinateur\n");
printf("3) Conna%ctre les r%cgles\n",i_cir,e_aigu);
printf("4) Quitter\n");
printf("Votre choix: ");
fflush(stdin);
test[0]=scanf("%d",&choice);
if (test[0]!=1)
{
printf("%c",beep);
printf("Erreur dans la saisie! Recommencez !\n");
system("pause");
}
} while (test[0]!=1);
return (choice);
}
// FIN MENU
int main()
{
int choice;
char beep;
beep=7;
do
{
choice=menu();
printf("%c",beep);
printf("Ce choix n'est pas disponible\n");
system("pause");
} while (choice>4 || choice<0);
system("pause");
return 0;
}
cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006 18 déc. 2004 à 22:09
Oui mais ça ne veut pas dire que getchar ne permettra la saisie que d'un seul caractère.... Ou alors c'est que j'ai du mal à comprendre cette fonction...
D'après les exemples que j'ai vu, getchar c'est une sorte de scanf...
yserver
Messages postés203Date d'inscriptionlundi 2 août 2004StatutMembreDernière intervention 8 septembre 2006 18 déc. 2004 à 22:37
ben si
tu affiche ton texte et ensuite tu met getchar
et tou de suite apres tu recupere la valeur de getchar
par exemple
print ("test")
touche = getchar ()
if (touche = 'a') then fait truc
if (touche = 'b') then fait machin
ca doit etre bon comme ca
cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006 19 déc. 2004 à 12:06
J'ai fait exactement le programme que tu m'as donné, je cite:
#include <stdio.h>
int main()
{
char touche;
printf("test ");
touche=getchar();
if (touche='a')
{
printf("\ncoucou!");
}
if (touche ='b')
{
printf("\ncoucouPROUT!");
}
system("pause");
return 0;
}
Non seulement il me laisse faire la saisie d'autant de caractères que je veux, mais en plus les conditions plantent... ^^
au pire c'est pas vraiment grave c'était juste pour faire un effet de style...
cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006 19 déc. 2004 à 19:11
Donc j'ai vérifié...
En effet getchar ne vérifie que la saisie du premier caractère mais il autorise la saisie de plusieurs caractères...
Moi je veux que l'utilisateur ne puisse en saisir qu'un seul. Si il en écrit un deuxième, ce dernier réécrit sur le premier...
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 19 déc. 2004 à 19:46
tu ne peux pas empecher un utilisateur d'appuyer sur le clavier !
d'ailleurs l'utilisateur peut vouloir anticiper les réponses ...
"Moi je veux que l'utilisateur ne puisse en saisir qu'un seul. Si il en écrit un deuxième, ce dernier réécrit sur le premier..."
ça, c'est pas possible. Comment l'utilisateur valide t'il sa saisie alors ? en appuyant sur Entrée ?
cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006 19 déc. 2004 à 19:55
Oui oilà il valide sur entrée mais par exemple, ce que je voudrai.
L'utilisateur tape 3:
Result: Votre choix [3]
L'utilisateur tape ensuite 9:
Result: Votre choix [9]
L'utilisateur tape ensuite 45:
Result: Votre choix [5]
Sachant que là il a pas confirmé sa saisie par entrée. Je veux juste que l'utilisateur soit cantonné à un seul caractère de choix...
plus_plus_fab
Messages postés232Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 8 janvier 2005 19 déc. 2004 à 21:49
lire avec fgets, mettre les caracteres lus dans un tampon, et récupérer le dernier élément.
Franchement, quel est l'intéret de faire ça ? aucun de mon point de vue. Si l'utilisateur ne rentre pas le bon choix, il faut lui faire recommencer sa saisie.
cs_BaptX
Messages postés30Date d'inscriptionsamedi 18 décembre 2004StatutMembreDernière intervention28 décembre 2006 19 déc. 2004 à 21:56
Bah ça sert pas à grand chose. C'est juste pour l'esthétique.
C'est vrai que ce n'est pas très important mais bon c'est toujours utile de savoir comment fiare ;)