Quelques questions en C / Win2k / Dev-Cpp

Signaler
Messages postés
30
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
28 décembre 2006
-
Messages postés
30
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
28 décembre 2006
-
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

Messages postés
30
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
28 décembre 2006

3) Si kek1 à la commande en c pour clear l'écran... Merci ;)
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

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
Messages postés
30
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
28 décembre 2006

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

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

Pour la 3) Utiliser system("cls");
;)
Messages postés
30
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
28 décembre 2006

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;
}
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

si getchar ne recupere que le dernier caractere saisisur stdin
Messages postés
30
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
28 décembre 2006

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...
Messages postés
203
Date d'inscription
lundi 2 août 2004
Statut
Membre
Dernière intervention
8 septembre 2006

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
Messages postés
30
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
28 décembre 2006

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...
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
if (touche =='b')
= est affectation
est comparaison

ciao...
BruNews, MVP VC++
Messages postés
30
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
28 décembre 2006

Erreur bête de ma part... :/
Merci de la correction, vais tester...
Messages postés
30
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
28 décembre 2006

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...
Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
Statut
Membre
Dernière intervention
8 janvier 2005

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 ?
Messages postés
30
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
28 décembre 2006

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...
Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
Statut
Membre
Dernière intervention
8 janvier 2005

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

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 ;)