Problème avec printf ^^

Résolu
Profil bloqué -  
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Alors voici ma ligne de code :


Printf("\nMonsieur %d %d declare : %d ",nom, prenom, avis);


Il me met erreur sur cette ligne mais je ne voit pas l'erreur. je comence juste le C ^^


Merci d'avance

37 réponses

Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   3 193
 
%d c'est pour les doubles...
à priopri toi tu veux des chaines de caractères, il faut utiliser %s (pour string)
Printf("\nMonsieur %s %s declare : %s ",nom, prenom, avis);


pour en savoir plus: http://www.cplusplus.com/reference/cstdio/printf/
1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
%d c'est pour les doubles...
Non, c'est pour les int ;-))).
0
Profil bloqué
 
Merci,
et je les declare comment ? avec un int normal ?
0
nadsky Messages postés 162 Date d'inscription   Statut Membre Dernière intervention   61
 
salut

ce sont des chaines de caractères et non des int, tu les déclares comme cela :

 char nom,prenom [20],
            char avis [15];
0
Profil bloqué
 
Voici mon programme en entier :


int main(int argc, char *argv[])
{
    int vie,joueur, ennemy;
    vie = 5;
    joueur = 5;
    ennemy = 5;
    printf("Il y a %d joueurs qui ont chacuns %d vies. \nIls doivent combatre %d ennemy ensemble.\n",vie, joueur, ennemy);
    printf("Entrer un Nombre :");
    int mort =0;
    scanf("%d", &mort);
    int ennemy2, ennemy3;
    ennemy2 = ennemy - mort + joueur ;
    ennemy3 = ennemy2 + mort - ennemy ;
    printf ("Vous avez tuez %d ennemy, Mais %d arrive en plus. \nIl y a donc maintenant %d ennemy.\n",mort, ennemy3, ennemy2);
    printf("Entrez votre Prenom : ");
    int prenom = 0, nom = 0, avis = 0;
    scanf("%s",&prenom);
    printf("Entrez Votre nom : ");
    scanf("%s",&nom);
    printf("\nQu'elle votre reaction a propose de ce programme ? ");
    scanf("%s",&avis);
    Printf("\nMonsieur %s %s declare : %s ",nom, prenom, avis); 
    system("PAUSE");
    return EXIT_SUCCESS;
}


Et c'est la ligne :

Printf("\nMonsieur %s %s declare : %s ",nom, prenom, avis); 


Qui Bloque .
0

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

Posez votre question
nadsky Messages postés 162 Date d'inscription   Statut Membre Dernière intervention   61
 
en effet, tu écris :
int prenom = 0, nom = 0, avis = 0;


mais si tu utilise %s, tu parles de chaines de caractères et pas d'entiers, déclare ces 3 variables comme je t'ai indiqué.
petit conseil : déclare tes variable ensemble, c'est + lisible
0
lord yu Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   1
 
Salut,

tu déclares nom, prenom et avs en int donc c'est bien %d mais quand tu fais le scanf c'est bien des entiers que tu rentres? (série de chiffre, sans lettre)
0
nadsky Messages postés 162 Date d'inscription   Statut Membre Dernière intervention   61
 
déjà, je ne vois pas comment nom et prenom peuvent être des int : ce sont des chaines de caractères
0
Profil bloqué
 
Je sais pas programmer encore ! donc aprennez moi plutôt que de me remballer !

Comment on détect les variable en chaine de caractere ?

char nom, prenom, avis ?
0
nadsky Messages postés 162 Date d'inscription   Statut Membre Dernière intervention   61
 
je ne te "remballe" pas, je t'explique ton problème et je comprends ton statut de débutant...on est tous passés par là, alors reste poli, stp.

un int c'est un nombre entier : 1, 35, 560...sans virgule
un char (caractère), c'est une seule lettre : a, b, c, w...
une chaine de caractère est un ensemble de plusieurs lettre, tu déclares cela comme un tableau de char, par exemple, un nom ou un prénom sont des chaines de caractères (tu n'as pas de nom à une seule lettre).

tu suis?
0
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   3 193
 
en effet...
int: entier sur 4 octets avec les nombres négatifs (par défaut c'est signed int si on veut etrehyper propre... jamais vu ;))
unsigned int: entier positif (permet d'avoir une valeur maximum 2 fois plus importante)
short: pareil, mais sur 2 octets (65536 valeurs possibles... dont de -32000 à +32000 ou de 0 à 65000 si on est en signed)
char (un octet): un charactère tout seul
string: chainde de charactères....
pour faire les chaines de charactères, tu peux prendre des objets string tout fait, ou utiliser un tableau de caractères, par exemple: char*nom[20] est un tableau de 20 case, permettant de stocker 19 caractères + le caractère de fin de chaine '\0' (très important).

bool: booléen (un octet car c'est dur de faire un seul bit!): vrai ou faux (true, false)

float, double : nombres à virgule...

comme ca a été dit plus haut, il est préférable de déclarer tes variables en haut de ton code, tout au meme endroit, c'est plus facile pour s'y retrouver...

pour cette partie par exemple :
int vie,joueur, ennemy;
vie = 5;
joueur = 5;
ennemy = 5;

j'aurai fait
int vie=5;
int joueur=5;
int ennemy=5;

je préfère, mais après chacun est libre de faire comme il veut
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention  
 
int: entier sur 4 octets
Ce n'est pas forcément sur 4 octets. Cela dépend de l'implémentation. La norme ne spécifie que des relations d'ordre.
0
lord yu Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   1
 
C'est simple, soit tu utilises des int (= nombres entiers) pour tes prénoms et noms pour des raisons de simplicité comme tu débutes (pas toujours facile de manipuler des strings (= chaine de caractères) au départ et dans ce cas pour les afficher tu utilises %d mais dans le scanf tu ne rentres que des chiffres, soit tu utilises des string que tu déclares comme un tableau de caractères (exemple char[20]) et dans ce cas tu ne dois pas dépasser le nombre de caractère entre crochet, pour les afficher tu utilises %s.

Après sache que le mieux est aussi de rester correct, on essaye de t'aider, la moindre des choses c'est de faire des efforts pour comprendre et de poser des questions calmement, sinon j'ai pleins d'autres choses à faire personnellement :)
0
Profil bloqué
 
J'ai modifier en mettan char a la place de int mais il met toujour erreur sur la même ligne.
0
nadsky Messages postés 162 Date d'inscription   Statut Membre Dernière intervention   61
 
si tu parles toujours de tes variables nom et prénom, c'est char[nombre entier] qu'il faut mettre pour déclarer une chaine de caractères :
comme je te l'ai dit dans un précédent post :
 char nom,prenom [20],
 char avis [15];


ici, j'ai pris 15 et 20, mais à toi de choisir la taille que tu veux.
reposte ton code si besoin
0
Profil bloqué
 
Ah il faut metre a la fin, je l'avais mis au début
0
Profil bloqué
 
Toujour le même problème.

le code est :


char prenom, nom, avis [100];
    scanf("%s",&prenom);
    printf("Entrez Votre nom : ");
    scanf("%s",&nom);
    printf("\nQu'elle votre reaction a propose de ce programme ? ");
    scanf("%s",&avis);
    Printf("\nMonsieur %s %s declare : %s ",nom, prenom, avis); 
    system("PAUSE");
0
Mary
 
Tu ne dois pas seulement mettre char. En effet, un nom ou un prénom est rarement constitué d'une seule lettre. Tu dois donc utiliser un tableau de caractères. Par exemple : char[4] prenom = "Mary";

Le 4 représente la taille de ta chaine, mais tu peux réserver 10 caractères pour une chaîne n'étant formée que de 3 caractères. Attention si tu ne mets pas une taille assez grande, en cas de dépassement de ton tableau, ton programme va planter.

Et ensuite, il faudra remplacer tes %d en %s ;)
0
nadsky Messages postés 162 Date d'inscription   Statut Membre Dernière intervention   61
 
tu as mis une majuscule à printf, il faut laisser en minuscule : réessaie
0
Mary
 
Tu n'avais pas mis ton code au moment où j'ai commencé à écrire ...
0
Profil bloqué
 
Sa marche .... presque ^^
maintenant je le lance je vais jusqu'au bout et au moment d'afficher le dernier printf il me met, projet1.exe a rencontré un problème et doit fermer : envoyer le rapport / ne pas envoyer.


Rha sa m'énerve
0
nadsky Messages postés 162 Date d'inscription   Statut Membre Dernière intervention   61
 
t'as changé la majuscule en minuscule comme je te l'ai indiqu"?
reposte ton code, stp
0
Profil bloqué
 
Le voici,

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int vie,joueur, ennemy;
    vie = 5;
    joueur = 5;
    ennemy = 5;
    printf("Il y a %d joueurs qui ont chacuns %d vies. \nIls doivent combatre %d ennemy ensemble.\n",vie, joueur, ennemy);
    printf("Entrer un Nombre :");
    int mort =0;
    scanf("%d", &mort);
    int ennemy2, ennemy3;
    ennemy2 = ennemy - mort + joueur ;
    ennemy3 = ennemy2 + mort - ennemy ;
    printf ("Vous avez tuez %d ennemy, Mais %d arrive en plus. \nIl y a donc maintenant %d ennemy.\n",mort, ennemy3, ennemy2);
    printf("Entrez votre Prenom : ");
    char prenom, nom, avis [100];
    scanf("%s",&prenom);
    printf("Entrez Votre nom : ");
    scanf("%s",&nom);
    printf("\nQu'elle votre reaction a propose de ce programme ? ");
    scanf("%s",&avis);
    printf("\nMonsieur %s %s declare : %s ",nom, prenom, avis); 
    system("PAUSE");
    return EXIT_SUCCESS;
}
0