Programme en C++ : affichage curieux
Fermé
riadusse
-
4 avril 2009 à 00:04
mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 - 4 avril 2009 à 15:05
mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 - 4 avril 2009 à 15:05
A voir également:
- Programme en C++ : affichage curieux
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
- Frequence programme national ✓ - Forum Messagerie
- Programme demarrage windows 10 - Guide
- Programme démarrage windows 10 - Guide
- Ce message d'erreur apparaît sur l'ordinateur d'elena. que peut-on dire du programme gwxux ? - Forum logiciel systeme
2 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
4 avril 2009 à 01:04
4 avril 2009 à 01:04
Salut,
Tu affiches l'adresse mémoire au lieu des valeurs.
Tu affiches l'adresse mémoire au lieu des valeurs.
for(i=0;i<n;i++)
{
printf("%i\n",s); // faut enlever& devant le s.
}
mamiemando
Messages postés
32283
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
17 mars 2023
7 572
4 avril 2009 à 15:05
4 avril 2009 à 15:05
En fait je pense qu'il faut que tu fasses bien la distinction entre un pointeur (une adresse) et un caractère.
En C une fonction ne peut pas modifier un paramètre (pour être plus exacte, le paramètre manipulé par la fonction est une recopie). Ainsi :
Pour s'en sortir il faut passer l'adresse de x (qui sera recopiée, mais qui pointera bien vers x) :
Pour scanf c'est la même chose, c'est pour ca que quand tu veux lire un entier tu écris :
Pour une chaîne de caractère s (ie un char * ou un char [ ]), on manipule déjà un pointeur. On a donc pas besoin de prendre l'adresse de s, car c'est déjà une adresse.
Si on revient à ton programme, le champ nom est un pointeur. Donc pas besoin de & pour le scanf.
Bonne chance
En C une fonction ne peut pas modifier un paramètre (pour être plus exacte, le paramètre manipulé par la fonction est une recopie). Ainsi :
#include <stdio.h>
void f(int x){
++x;
}
int main(){
int x = 69;
f(x);
printf("x = %d\n",x); // affiche 69 !
return 0;
}
Pour s'en sortir il faut passer l'adresse de x (qui sera recopiée, mais qui pointera bien vers x) :
void f(int *x){
++(*x);
}
int main(){
int x = 69;
f(&x);
printf("x = %d\n",x); // affiche 70
return 0;
}
Pour scanf c'est la même chose, c'est pour ca que quand tu veux lire un entier tu écris :
scanf("%d",&x);
Pour une chaîne de caractère s (ie un char * ou un char [ ]), on manipule déjà un pointeur. On a donc pas besoin de prendre l'adresse de s, car c'est déjà une adresse.
Si on revient à ton programme, le champ nom est un pointeur. Donc pas besoin de & pour le scanf.
scanf("%s",t[i].nom);
Bonne chance
4 avril 2009 à 07:54
for(i=0;i<n;i++)
{
printf("%s",aff[i].nom);//affichage du tableau final
}
4 avril 2009 à 11:54
Cette instruction ne permet pas de copier toute la structure. Pour copier une structure, faut copier champ par champ.
Ou tout simplement, tu te sers de la structure t pour afficher le nom.
printf("%s",t[i].nom);//affichage du tableau final
Et enfin pour : scanf("%s",&t[i].nom); //il ne faut pas mettre &.
Ce qui donne : scanf("%s",t[i].nom);
Cdlt