a tous
voila ce que j´ai fait, mais je ne sais pas pourquoi, quant je le lance, il me dis que : Proget.exe a rencontré un probleme et doit fermè
::
typedef struct identite identite;
struct identite
{
char prenom;
char nom;
long age;
};
int main(int argc, char *argv[])
{
identite moussa;
moussa.prenom = "Moussa";
moussa.nom = "Je ne sais pas";
moussa.age = 20;
printf("%s %s %ld", moussa.prenom, moussa.nom, moussa.age);
system("PAUSE");
return 0;
}
et ![]()
j´ai oublier de precisier que je travaille sous Dev-c++
char != String
j´ai pas bien compris ta reponse hitman_alias_47
C´est la première fois que tu écris un programme en C ? Si tu ne fais pas la distinction entre un caractère et une chaîne de caractères, tu vas t´amuser avec les pointeurs... Oh, oui...
Un conseil, apprends la base avant de te lancer dans l´utilisation de structures complexes : C n´est pas PhP.
Puis en plus on n´utilise pas le = pour affecter une chaine à un tableau de char, on utilise strcpy ou strncpy
On peut, mais seulement pour une intialisation (La chaine sera stoquée en dur par le compilo).
Ce qui m´étonne, c´est que le programme compile alors que tu assignes une chaine "moussa" a un char. es tu sur de ne pas avoir mis de char* dans ta structure ?
ça expliquerait des choses.
petite correction proposée (version C):
typedef struct identite identite;
struct identite
{
char prenom[30];
char nom[30];
long age;
};
int main(int argc, char *argv[])
{
identite moussa;
strcpy(moussa.prenom,"Moussa");
strcpy(moussa.nom,"Raser");
moussa.age = 20;
printf("%s %s %ld", moussa.prenom, moussa.nom, moussa.age);
system("PAUSE");
return 0;
}
petite correction proposée (version C++):
using namespace std;
typedef struct identite identite;
struct identite
{
string prenom;
string nom;
long age;
};
int main(int argc, char *argv[])
{
identite moussa;
moussa.prenom = "Moussa";
moussa.nom = "Raser";
moussa.age = 20;
printf("%s %s %ld", moussa.prenom.c_str(), moussa.nom.c_str(), moussa.age);
system("PAUSE");
return 0;
}
PS : humour, le "raser" ![]()
un "long" pour l´âge ? C´est un peu ridicule, tu as déjà vu des âges négatifs et des âges de 2^31 ? UN usigned short serait plus approprié, pour l´instant...
hitman_alias_47 Posté le 21 août 2006 à 19:40:09 C´est la première fois que tu écris un programme en C ? Si tu ne fais pas la distinction entre un caractère et une chaîne de caractères, tu vas t´amuser avec les pointeurs... Oh, oui...
Un conseil, apprends la base avant de te lancer dans l´utilisation de structures complexes : C n´est pas PhP.
euh.. , ayant etudier le php , je trouve k´il est aussi complexe que le c
hitman : qu´est ce qu´on gagne à utiliser un "unsigned short" plutôt qu´un long ?
de nos jour on n´est plus à 2 octets près pour la mémoire, d´autant plus, qu´avec les problème d´alignement, sa structure comprennant des pointeurs vers des chaines, elle fera la même taille avec un long, un short, ou même un char.
dautre par, d´un point de vue vitesse de calcul, il n´y a pas de différence.
Il est donc aussi simple d´utiliser des int partout, plutot que de se compliquer la vie avec des noms de type à rallonge (sans compter qu´avoir des nombre négatif peut-être utile s´il vaut stocker des informations spéciale, ou alors son age en mois plutôt qu´en année, etc.)
bah, ca peut permettre au compilateur de vectorialiser si il fait plein de calcul sur des ages en meme temps... bon j´arrete..
Ou alors s´il veut faire passer ca donné sur le reseau, ca economise de la BP. Mais bon, c´est de l´optim a 2 balles...
C´est vrai que mettre long est bizarre quand meme, j´aurais mis int...
oui, sauf que ça ne change rien, sur la plupart des archi standard avec des compilo standard (x86, AMD64, avec vc++ ou gcc, etc.) int et long sont exactement la même chose, donc c´est une différence pour le programmeur, mais pas pour le compilo.
C´est surtout d´un point de vue conceptuel que c´est ridicule, un âge négatif pouvant tapper dans les milliards...
Après, oui, le compilo risque de mettre la bête dans le format au dessus pour des questions d´optimisation. Mais si tu passes sur une machine ou un compilo plus ancien, partir du postulat "long == int == short" va te causer de méchants bugs de type int overflow...
personne n´a dit
long == int == short.
Par contre, long == int oui.
Ce que je veux dire, c´est que ça ne sers à rien quand on apprend la programmation de se prendre la tête sur des problème qui risqueraient de se produire sur des environnement "ancien" (il faut aller vraiment loin), ou super tordu. Comme un amateur n´en rencontrera pas avant longtemps. C´est le genre de chose qui complique le langage pour rien.
Il est aussi simple d´apprendre le C avec la règle : quand on a besoin de dtocker un entier, on utilise un int. Et plus tard, on fait un peu plus dans la dentelle.
dnob700
+1 sur le fond, mais bon, autant s´habituer à respecter contraintes et normes, même si on sait qu´elles sont dépassées (Sauf si il y a un gain en performances à ne pas les respecter :p ). J´ai programmé pas mal en ASM sur diverses bestioles dans mes jeunes années, ça doit être de là que vient ma rigueur avec les types de données :p
"Ce que je veux dire, c´est que ça ne sers à rien quand on apprend la programmation de se prendre la tête sur des problème qui risqueraient de se produire sur des environnement "ancien" (il faut aller vraiment loin), ou super tordu"
-> Dans ce cas, pourquoi commencer par un langage dont le principal intérêt est que justemment il permet de se préoccuper de tout ça ?
Je suis tout à fait d´accord avec toi sur l´inutilité pour un débutant de penser à ça. Mais à force de dire "Venez, le C c´est facile" tu te retrouves avec des gens qui utilisent scanf à tout va, des codes sales, des fuites de mémoire...
Bigloo, le debat n´est pas centré la dessus dans ce topic.
Il a choisit le C, on l´aide en C du mieux que l´on peut.
Je ne suis absoluement pas convaincu que le C soit le meilleur language pour commencer a programmer.
Dans un premier temps parceque ce langage depend de qui ont est, des connaissance que l´on a en general, de la comprehension que l´on a du fonctionnement d´un ordinateur, de ce que l´on veut en faire.
En outre, le C est le langage pour lequel il y a le plus de support (AMHA) et cela peut le rendre attrayant pour un débutant.
"Il a choisit le C, on l´aide en C du mieux que l´on peut. "
-> Exact, et ça sera bien mieux pour lui de comprendre dès le début ce qu´il fait, si c´est dans le style du langage. Ne serait-ce que pour éviter de croiser un jour un puriste qui le dégoûtera complètement en lui expliquant toutes les mauvaises habitudes qu´il a prises.
comprendre oui, mais on ne peut pas tout apprendre en meme temps. La structure et la logique me semblent bien plus important pour un debuttant que la taille des variables.
Pourquoi serait il degoutte ? parcequ´il lui reste des choses a apprendre ?
On a toujours des choses qu´il nous reste a apprendre. (heureusement, sinon on s´ennuyerait)