Taper un nom en C
Dernière réponse : dans Programmation
Je fais un programme, et j'aimerais bien que l'utilisateur qui rentre dans le programme entre son nom et comme cela pour la fin du programme, je peux lui dire "merci (son nom) d'avoir joué" par exemple ...
Le principe est donc tres bète mais lorseque je lui demande d'entré un nom, je peux taper le nom que je veux, mais quand je le print autre par dans le programme, il ne me met que la 1er lettre du nom ... je crois que c'est une histoir de "%s" ou "%c", ... je m'y perd ...
Je ne sais pas lequel mettre ...
Voici mon code source :
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int nb;
char choix_j;
char reponse;
int x;
int rep;
int il_y_a_une_erreur;
char nom;
main()
{
clrscr();
gotoxy(12,12);
printf("Veillez inserez votre nom : ");
gotoxy(12+28,12);
scanf("%c", &nom);
clrscr();
textcolor(15);
do
{
randomize();
nb = random(2000000000)-1000000000;
gotoxy(20,11); cprintf("%c,", nom);
gotoxy(20,12); cprintf("Le nombre que l'ordinateur a tir‚ est :");
gotoxy(35,14); cprintf("[%d]", nb);
do
{
textcolor(15);
gotoxy(25,20); cprintf("Voulez-vous continuer ? (O/N)");
gotoxy(35,22); cprintf("[ ]");
gotoxy(37,22);
choix_j=toupper(getche());
if(choix_j == 'O' || choix_j == 'N')
{
if(choix_j == 'O')
{
x=0;
}
else
{
x=1;
clrscr();
gotoxy(30,12); printf("Merci d'avoir jou‚ %c" ,nom);
gotoxy(23,13); printf("appuyez sur une touche pour arrŠter");
gotoxy(28,14); printf("et quitter le programme");
getch();
}
il_y_a_une_erreur=0;
}
else
{
textcolor(420);
gotoxy(22,24);
cprintf("ERREUR, vous devez r‚pondre par O ou N ...");
il_y_a_une_erreur=1;
}
}while(il_y_a_une_erreur==1);
}while(x==0);
}
Merci pour vos aides !!!
Le principe est donc tres bète mais lorseque je lui demande d'entré un nom, je peux taper le nom que je veux, mais quand je le print autre par dans le programme, il ne me met que la 1er lettre du nom ... je crois que c'est une histoir de "%s" ou "%c", ... je m'y perd ...
Je ne sais pas lequel mettre ...
Voici mon code source :
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int nb;
char choix_j;
char reponse;
int x;
int rep;
int il_y_a_une_erreur;
char nom;
main()
{
clrscr();
gotoxy(12,12);
printf("Veillez inserez votre nom : ");
gotoxy(12+28,12);
scanf("%c", &nom);
clrscr();
textcolor(15);
do
{
randomize();
nb = random(2000000000)-1000000000;
gotoxy(20,11); cprintf("%c,", nom);
gotoxy(20,12); cprintf("Le nombre que l'ordinateur a tir‚ est :");
gotoxy(35,14); cprintf("[%d]", nb);
do
{
textcolor(15);
gotoxy(25,20); cprintf("Voulez-vous continuer ? (O/N)");
gotoxy(35,22); cprintf("[ ]");
gotoxy(37,22);
choix_j=toupper(getche());
if(choix_j == 'O' || choix_j == 'N')
{
if(choix_j == 'O')
{
x=0;
}
else
{
x=1;
clrscr();
gotoxy(30,12); printf("Merci d'avoir jou‚ %c" ,nom);
gotoxy(23,13); printf("appuyez sur une touche pour arrŠter");
gotoxy(28,14); printf("et quitter le programme");
getch();
}
il_y_a_une_erreur=0;
}
else
{
textcolor(420);
gotoxy(22,24);
cprintf("ERREUR, vous devez r‚pondre par O ou N ...");
il_y_a_une_erreur=1;
}
}while(il_y_a_une_erreur==1);
}while(x==0);
}
Merci pour vos aides !!!
Autres pages sur : taper nom
Lassé par la pub ? Créez un compte
okk .. sympa ce forum !!!
Pourquoi les gens sont si désagrable ...
et je ne vois pas du tout a quoi sert le forum en C si quand je pose une question, je me fait critiqué et même insulter ... :s
Qu'est ce que je t'ai fais moi kangOl .. t'es bien gantil mais si c pour avoir des réponse "achète un bouquin bordel" j'aurais bien pu y penser moi même !!!!!!!!
Pourquoi les gens sont si désagrable ...
et je ne vois pas du tout a quoi sert le forum en C si quand je pose une question, je me fait critiqué et même insulter ... :s
Qu'est ce que je t'ai fais moi kangOl .. t'es bien gantil mais si c pour avoir des réponse "achète un bouquin bordel" j'aurais bien pu y penser moi même !!!!!!!!
ou lalalalalala
ils sont beau les codes ici
bon simple expliquation: un char c'est un charactere seul, et une chaine est un tableau de char suffisament grand pour pourvoir stocker toute la chaine , si la longueur de la chaine n'est pas assez grande il y a un depassement de tampon (et le programme plante generalement)
donc il faut que reponse soit un tableau de caractere
ensuite scanf :
longueur maximale, exprimée sous forme d'entier, entre le caractère %
et l'indicateur de conversion. Si aucune longueur n'est donnée, une
valeur infinie est utilisée par défaut (avec une exception, voir plus
bas). Autrement, la conversion examinera au plus le nombre de car-
actères indiqués. Avant que les conversions ne commencent, la plupart
d'entre elles éliminent les blancs. Ces espaces blancs ne sont pas
comptés dans le champ de largeur maximale.
actères blancs. Le pointeur correspondant doit être du type
char *, et la chaine doit être assez large pour accueillir
toute la séquence, ainsi que le caractère NUL final. La conver-
sion s'arrête au premier caractère blanc, ou à la longueur max-
imale du champ.
Le pointeur associé doit être du type char *, et il doit y
avoir suffisament de place dans la chaîne pour tous les carac-
teres. Aucun caractère NUL final n'est ajouté. Les caractères
blancs de début ne sont pas supprimés. Si on veut les éliminer,
il faut utiliser un espace dans le format.
(Manual page scanf(3))
PS : <conio.h> est a bannir
ils sont beau les codes ici
bon simple expliquation: un char c'est un charactere seul, et une chaine est un tableau de char suffisament grand pour pourvoir stocker toute la chaine , si la longueur de la chaine n'est pas assez grande il y a un depassement de tampon (et le programme plante generalement)
donc il faut que reponse soit un tableau de caractere
ensuite scanf :
Citation :
En plus de ces attributs peut se trouver un champ optionnel delongueur maximale, exprimée sous forme d'entier, entre le caractère %
et l'indicateur de conversion. Si aucune longueur n'est donnée, une
valeur infinie est utilisée par défaut (avec une exception, voir plus
bas). Autrement, la conversion examinera au plus le nombre de car-
actères indiqués. Avant que les conversions ne commencent, la plupart
d'entre elles éliminent les blancs. Ces espaces blancs ne sont pas
comptés dans le champ de largeur maximale.
Citation :
%s Correspond à une séquence de caractères différents des car-actères blancs. Le pointeur correspondant doit être du type
char *, et la chaine doit être assez large pour accueillir
toute la séquence, ainsi que le caractère NUL final. La conver-
sion s'arrête au premier caractère blanc, ou à la longueur max-
imale du champ.
Citation :
%c Correspond à une séquence de width caractères (par défaut 1).Le pointeur associé doit être du type char *, et il doit y
avoir suffisament de place dans la chaîne pour tous les carac-
teres. Aucun caractère NUL final n'est ajouté. Les caractères
blancs de début ne sont pas supprimés. Si on veut les éliminer,
il faut utiliser un espace dans le format.
(Manual page scanf(3))
PS : <conio.h> est a bannir
Dumoria a écrit(En complément de la documentation) Par exemple dans ton cas, tu feras
parce que nom est l'adresse de ta chaine.
char nom[20];
....
scanf("%s",nom);
parce que nom est l'adresse de ta chaine.
surtout pas !!!!
deja pourquoi n'a t'il pas le droit de mettre des espace dans son nom ? il n'a pas le droit de s'appeler "pierre antoine" ?
et pourquoi doit t'il planter si on entre plus de 19 caractere ?
scanf("%19c",nom); non mais ...
faut aussi qu'il pense a initialiser sa chaine aussi ...
Initialiser ? Pourquoi faire ici ?
Quoiqu'il en soit, quent1, il n'y a pas de meilleur conseil que celui de Kangol : lis un cours pour debutant, n'importe quoi, je sais pas moi, CA http://etud.epita.fr/~mk/HTML/
Quoiqu'il en soit, quent1, il n'y a pas de meilleur conseil que celui de Kangol : lis un cours pour debutant, n'importe quoi, je sais pas moi, CA http://etud.epita.fr/~mk/HTML/
%c Correspond à une séquence de width caractères (par défaut 1).
Le pointeur associé doit être du type char *, et il doit y
avoir suffisament de place dans la chaîne pour tous les carac-
teres. Aucun caractère NUL final n'est ajouté. Les caractères
blancs de début ne sont pas supprimés. Si on veut les éliminer,
il faut utiliser un espace dans le format.
(bouh on peux pas mettre du gras dans un quote)
Le pointeur associé doit être du type char *, et il doit y
avoir suffisament de place dans la chaîne pour tous les carac-
teres. Aucun caractère NUL final n'est ajouté. Les caractères
blancs de début ne sont pas supprimés. Si on veut les éliminer,
il faut utiliser un espace dans le format.
(bouh on peux pas mettre du gras dans un quote)
Citation :
deja pourquoi n'a t'il pas le droit de mettre des espace dans son nom ? il n'a pas le droit de s'appeler "pierre antoine" ?et pourquoi doit t'il planter si on entre plus de 19 caractere ?
scanf("%19c",nom); non mais ...
C'est pour cette raison que personnellement je n'utilise plus scanf, mais plutot getchar.
C'etait juste pour donner une solution simple pour commencer, parce que bien sur, si tu commences à prendre des cas particuliers... Je pense que notre ami sera deja bien content de pouvoir saisir "pierre-antoine" !
Lassé par la pub ? Créez un compte