Quelques questions en C / Win2k / Dev-Cpp

cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 décembre 2006 - 18 déc. 2004 à 18:03
cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 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 ;)

Merci à tous

17 réponses

cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 décembre 2006
18 déc. 2004 à 18:20
3) Si kek1 à la commande en c pour clear l'écran... Merci ;)
0
yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Derniè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
0
cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 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.
0
cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 décembre 2006
18 déc. 2004 à 19:50
Pour la 3) Utiliser system("cls");
;)
0
cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 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;
}
0
yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Dernière intervention 8 septembre 2006
18 déc. 2004 à 21:13
si getchar ne recupere que le dernier caractere saisisur stdin
0
cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 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...
0
yserver Messages postés 203 Date d'inscription lundi 2 août 2004 Statut Membre Derniè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
0
cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 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...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 déc. 2004 à 18:17
if (touche =='b')
= est affectation
est comparaison

ciao...
BruNews, MVP VC++
0
cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 décembre 2006
19 déc. 2004 à 18:32
Erreur bête de ma part... :/
Merci de la correction, vais tester...
0
cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 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...
0
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Derniè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 ?
0
cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 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...
0
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Derniè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.
0
cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 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 ;)
0
Rejoignez-nous