Problème en C
Dernière réponse : dans Programmation
Bonsoir tout le monde
Voila j'ai un problème
J'avais fais un truc simple qui marché et quand je refais la compilation tout est ok mais quand je tape le prenom sa fais rapport d'erreur
Voila le code : ( je travaille avec dev-C++ )
Et par la meme occasion je voudrais savoir comment afficher une chaine de caractere avec un if ou un swtich
Exemple :
Au lieu de mettre un chiffre a la place de sliverman parce que si il faut mettre que du numerique dans les if sa serait pas top
Merci d'avance
Voila j'ai un problème
J'avais fais un truc simple qui marché et quand je refais la compilation tout est ok mais quand je tape le prenom sa fais rapport d'erreur
Voila le code : ( je travaille avec dev-C++ )
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char szPrenom; printf("Entez votre prenom : \n"); scanf("%s", szPrenom); printf("Votre prenom est : %s \n"); system("PAUSE"); return 0; }
Et par la meme occasion je voudrais savoir comment afficher une chaine de caractere avec un if ou un swtich
Exemple :
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char szPrenom; printf("Entez votre prenom : \n"); scanf("%s", szPrenom); if (szPrenom == 'sliverman') { printf("Bien joué"); } else { printf("Perdu"); } system("PAUSE"); return 0; }
Au lieu de mettre un chiffre a la place de sliverman parce que si il faut mettre que du numerique dans les if sa serait pas top
Merci d'avance
Autres pages sur : probleme
Lassé par la pub ? Créez un compte
Citation :
et maintenant, ca fait quoi si le mec met plus de 20 caractères dans son prenom?Segmentation fault, probablement
A la limite ya qu'à faire de l'allocation dynamique; au fur et a mesure que tu lis la chaîne dans le tampon caractère par caractère tu realloc plus de place, et à la fin tu rajoutes le '\0' et voila!
Et on free(); la mémoire quand on en a plus besoin.
Bonjour
Oui, pour comparer 2 chaines, utilise la fonctions strcmp(); de la bibliothèque "string.h"
Ensuite, tu peux faire
sans oublier d'inclure "malloc.h"
Bibop
Citation :
if (szPrenom == 'sliverman')Oui, pour comparer 2 chaines, utilise la fonctions strcmp(); de la bibliothèque "string.h"
Ensuite, tu peux faire
char* szPrenom = NULL; // toujours initialiser un pointeur szPrenom = (char*) malloc ( sizeof(char) * nb_carac);
sans oublier d'inclure "malloc.h"
Bibop
szPrenom = (char*) malloc ( sizeof(char) * nb_carac);
vire moi ce (char *) l'utilisation du cast est inutile avec un malloc. Et je ne pense pas que ce sois utile de faire un sizeof(char) vu que ça vaut 1.
Sinon c'est moyen moyen d'utiliser scanf, pour une saisie de caractères. Mieux vaut utiliser fgets et virer le '\n' aprés preuve
Citation :
sans oublier d'inclure "malloc.h"Gnè ? malloc est défini dans stdlib.h
Alors, il est vrai que le cast n'est pas obligatoire cependant, je prefere le mettre. La fonction malloc() retourne un void(*). Dans ce cas, le cast est utile car il permet de forcer le type de l'adresse de retour, ça permet de dire "je renvoi un pointeur sur une chaine de caractères", c'est plus propre : cela évite au compilateur de trouver tout seul le type de donner en retour.
Ensuite, il faut utiliser un sizeof car d'un ordinateur à un autre les données ne sont pas encodées sur le même nombre de bits.
Exemple : pour les entiers certains systemes vont allouer 2 octets et d'autre 4 octets... le systeme alloue ce qu'il a besoin.
Alors effectivement, pour les caractères ça n'est pas indispensable étant donné qu'il sont toujours sur un octet... cependant je trouve que ça fait plus "propre" et ça permet d'avoir une définition homogène et globale de la fonction.
ps : petite note personnel à "tebonb" ... merci de respecter les autres... Evites de te prendre pour une brute qui maîtrise tous mieux que tout le monde en utilisant des termes comme "vire moi" ou "gnè" ... je ne te connais pas, tu ne me connais, ayont une discution courtoise ... merci :-D
Ensuite, il faut utiliser un sizeof car d'un ordinateur à un autre les données ne sont pas encodées sur le même nombre de bits.
Exemple : pour les entiers certains systemes vont allouer 2 octets et d'autre 4 octets... le systeme alloue ce qu'il a besoin.
Alors effectivement, pour les caractères ça n'est pas indispensable étant donné qu'il sont toujours sur un octet... cependant je trouve que ça fait plus "propre" et ça permet d'avoir une définition homogène et globale de la fonction.
ps : petite note personnel à "tebonb" ... merci de respecter les autres... Evites de te prendre pour une brute qui maîtrise tous mieux que tout le monde en utilisant des termes comme "vire moi" ou "gnè" ... je ne te connais pas, tu ne me connais, ayont une discution courtoise ... merci :-D
Beuh ? Quelqu'un a trouvé que j'étais une brute dans mes propos ? Je respecte tout le monde et je vois pas le rapport avec les termes "vire moi" et "gne", je vois pas ce que tu me reproches. En même temps, ce que je dis là, j'ai vu des programmeurs le répéter, répéter et rerépéter et j'ai jamais dit que je maîtrise tout mieux que les autres et c'est pas mon but de le montrer, c'est pas pour moi, c'est pas pour aider. Je prends la peine de donner des liens explicant ce que je dis, j'en ai meme encore un trés fiable au sujet de malloc.
Bonsoir,
Tu n'es pas brute dans tes propos, je me suis mal exprimé, mais je t'ai trouvé un peu offensant c'est tout. Désolé si tu l'as mal pris, je ne cherche en aucun cas le conflit :-P. En fait, il y a autant de façons de programmer qu'il y a de developpeur (enfin j'espere pas quand meme ;-) ) et tout le monde y va de sa petite sauce... concernant le malloc, je veux bien te croire volontier. Cependant moi, je prefere caster... alors après on peu parler de chipotage car au final, ça ne change pas grand chose quand même :-D.
Pour en revenir au sujet, je pense que silverman à toutes les cartes en main pour programmer sa petite application maintenant :-D
Bibop
Tu n'es pas brute dans tes propos, je me suis mal exprimé, mais je t'ai trouvé un peu offensant c'est tout. Désolé si tu l'as mal pris, je ne cherche en aucun cas le conflit :-P. En fait, il y a autant de façons de programmer qu'il y a de developpeur (enfin j'espere pas quand meme ;-) ) et tout le monde y va de sa petite sauce... concernant le malloc, je veux bien te croire volontier. Cependant moi, je prefere caster... alors après on peu parler de chipotage car au final, ça ne change pas grand chose quand même :-D.
Pour en revenir au sujet, je pense que silverman à toutes les cartes en main pour programmer sa petite application maintenant :-D
Bibop
Caster (ou transtyper pour éviter le pseudo anglais) un malloc c'est tout à fait possible. Disons qu'il s'agit là de la façon puriste, disons pour savoir exactement ce que l'on veut en retour (peut-être mieux pour débogger le programme).
Maintenant en effet "strcmp" est la fonction qui permet de comparer deux chaines (un man strcmp pourra certainement t'aider afin de savoir exactement comment ça marche mais je crois que tu as déjà des éléments de réponses ici même).
Et le "malloc" (encore une fois man malloc pourra te renseigner) me semble pas mal. Cela dit, les puristes encore eux, vérifirons la valeur de retour du malloc pour savoir si il renvoie NULL, tout ça dans le but de blinder le programme lors de l'exécution (évite les segmentation fault) et pas lors de la compilation qui ne vérifie rien à ce propos.
Voilà
Bye
Maintenant en effet "strcmp" est la fonction qui permet de comparer deux chaines (un man strcmp pourra certainement t'aider afin de savoir exactement comment ça marche mais je crois que tu as déjà des éléments de réponses ici même).
Et le "malloc" (encore une fois man malloc pourra te renseigner) me semble pas mal. Cela dit, les puristes encore eux, vérifirons la valeur de retour du malloc pour savoir si il renvoie NULL, tout ça dans le but de blinder le programme lors de l'exécution (évite les segmentation fault) et pas lors de la compilation qui ne vérifie rien à ce propos.
Voilà
Bye
Citation :
Pointeur générique, le type void*, cast« void » signifie vide, c'est un type indéfini, son utilisation principale est d'en faire un pointeur dit « générique 3 » à savoir un pointeur indépendant de tout type en particulier. Un tel pointeur permet de manier l'adresse mémoire d'un objet dont on ignore le type.
Par exemple la fonction malloc() va être utilisée dans le programme pour n'importe quel type d'objet, int*, char*, float* etc. et notamment pour des adresses mémoire de structures créées par le programmeur. Il faut donc que la fonction puisse allouer de la mémoire pour n'importe quel type d'objet y compris des structures inventées par le programmeur. Pour cette raison la fonction malloc renvoie un pointeur générique, c'est-à-dire tout simplement une adresse mémoire qui correspond à une zone de mémoire de la taille en octets passée en argument à la fonction.
En général le retour de la fonction malloc est ensuite forcé au type de l'objet souhaité par un « cast ». C'est une opération qui permet de transformer le type générique dans le type de l'objet souhaité. Avec cette modification de cast l'appel de la fonction malloc devient :
ptr = ( T* ) malloc (sizeof( T )) ;
Un type placé entre parenthèse à gauche du retour de la fonction transforme celui-ci dans ce type. Si par exemple T est int on a :
ptr=(int*)malloc(sizeof(int)) ;
ce qui signifie que ptr est un pointeur de type int*.
Bien que le cast ne soit pas obligatoire il est toutefois préférable parce qu'il donne la possibilité au compilateur de vérifier la bonne adéquation des types dans le programme au moment de la compilation.
tiré de : fdr.free.fr/alldocs/4%20ateliers/creat_lang1/8%20Pointeurs/8%20Pointeurs.rtf
Moi aussi je peux trouver des liens ^^... Maintenant je pense que l'on a fait le tour... Stop :-D... on radote comme de vieux séniles lol
Bibop
Bonjour à tous,
Pour commener le prototype de la fonction malloc () est défini à la fois dans le fichier stdlib.h et dans malloc.h donc sur ce sujet là tout le monde a raison. (Regarder dans MSDN pour vérifier, enfin pour ceuw qui l'ont).
Ensuite pour le grand débat sur le cast...
Pour le malloc il n'est pas obligatoire, mais il est préférable d'apprendre correctement à programmer aux gens afin qu'ils prennent de bonne habitude depuis le début et qu'ils évitent de faire des choses qui marchent sans vraiment comprendre ce qui se passe, enfin c'est la philosophie que j'ai lorsque j'enseigne à mes étudiants
Bouh343
Pour commener le prototype de la fonction malloc () est défini à la fois dans le fichier stdlib.h et dans malloc.h donc sur ce sujet là tout le monde a raison. (Regarder dans MSDN pour vérifier, enfin pour ceuw qui l'ont).
Ensuite pour le grand débat sur le cast...
Pour le malloc il n'est pas obligatoire, mais il est préférable d'apprendre correctement à programmer aux gens afin qu'ils prennent de bonne habitude depuis le début et qu'ils évitent de faire des choses qui marchent sans vraiment comprendre ce qui se passe, enfin c'est la philosophie que j'ai lorsque j'enseigne à mes étudiants
Bouh343
en c++ c'est quand même + simple
#include <iostream>
#include <string>
using namespaces std;
int main(int argc, char *argv[])
{
string szPrenom = null;
cout << "Entez votre prenom :" << endl;
cin >> szPrenom;
if (szPrenom == 'sliverman')
cout << "Bien joué";
else
cout << "Perdu";
system("PAUSE");
return_succes;
}
;-)
#include <iostream>
#include <string>
using namespaces std;
int main(int argc, char *argv[])
{
string szPrenom = null;
cout << "Entez votre prenom :" << endl;
cin >> szPrenom;
if (szPrenom == 'sliverman')
cout << "Bien joué";
else
cout << "Perdu";
system("PAUSE");
return_succes;
}
;-)
bonjour à tous,
poussinphp, peut tu nous rappelé l'utilité de
ensuite tu initialise une chaine a null ??!!!
cout << "c'est n'importe quoi" << end;
on ne compare pas deux chaines de caractères dans un if, mais il faut se servir de la fonction strcmp() mais cela a deja été dit plus haut.
Heu.... return_succes il sort d'où? du frigo? et ta fonction main ne retourne rien du tout vu qu'il n'ya pas le mot clé <b>return</b>
Enfin, par pitié.... ayant de la compassion pour les professeurs... arreter de dire que vous faites du C++ parce que vous utiliez cin, cout... s'il vous plait...
Ca nous pique les yeux !!!
Le principe du C++ est l'objet, avec des concepts qui en decoule (héritage, polymorphisme....) et dans ton code poussinphp je ne vois ni classe ni d'objet ni quoique se soit de ce genre..
bouh343
poussinphp, peut tu nous rappelé l'utilité de
s'il te plait?
using namespaces std;
ensuite tu initialise une chaine a null ??!!!
if (szPrenom == 'silverman')
cout << "c'est n'importe quoi" << end;
on ne compare pas deux chaines de caractères dans un if, mais il faut se servir de la fonction strcmp() mais cela a deja été dit plus haut.
Heu.... return_succes il sort d'où? du frigo? et ta fonction main ne retourne rien du tout vu qu'il n'ya pas le mot clé <b>return</b>
Enfin, par pitié.... ayant de la compassion pour les professeurs... arreter de dire que vous faites du C++ parce que vous utiliez cin, cout... s'il vous plait...
Ca nous pique les yeux !!!
Le principe du C++ est l'objet, avec des concepts qui en decoule (héritage, polymorphisme....) et dans ton code poussinphp je ne vois ni classe ni d'objet ni quoique se soit de ce genre..
bouh343
1) using namespace std;
sans ça t'ecrit :
std::cout <<.....
avec t'ecrit:
cout<<
2) Le language C++ admet comme condition du if les paramètres contenu dans les ( et ). Ce qui ce trouve après est executé. si il y a plusieures lignes de codes après on met { et }. je les aient pas mis car ça alourdis le code (j'avais mais des espacements pou indenter mais sont aprti lors du post) et qu'il y a qu'une seule instruction après le if.
3) Ensuite pour du c++, ça puissance c'est les classes (poo) mais c'est pas obligé.
un ptit exemple (on me dit que je sait pas faire du c++) :-P
dans main.h dans le ifndef (la fleme de tout ecrire lol)
class toto{
toto();
~toto();
int ecrire(char*);
};
dans main.cpp
toto::toto()
{
// constructeur
}
toto::~toto()
{
// destructeur
}
int toto::ecrire(char *)
{
// lignes
return 1;
}
int main(....)
{
toto titi* = new toto();
return_succes;
}
(pour la syntaxe c'est à peu près ça, j'ai l'habitude à l'autocompletion :-P )
Alors je sais pas faire du C++? ;-)
d'ailleurs j'en profite pour faire une annonce : je cherche un co developpeur pour mon moteur C++ SDL ;-)
sans ça t'ecrit :
std::cout <<.....
avec t'ecrit:
cout<<
2) Le language C++ admet comme condition du if les paramètres contenu dans les ( et ). Ce qui ce trouve après est executé. si il y a plusieures lignes de codes après on met { et }. je les aient pas mis car ça alourdis le code (j'avais mais des espacements pou indenter mais sont aprti lors du post) et qu'il y a qu'une seule instruction après le if.
3) Ensuite pour du c++, ça puissance c'est les classes (poo) mais c'est pas obligé.
un ptit exemple (on me dit que je sait pas faire du c++) :-P
dans main.h dans le ifndef (la fleme de tout ecrire lol)
class toto{
toto();
~toto();
int ecrire(char*);
};
dans main.cpp
toto::toto()
{
// constructeur
}
toto::~toto()
{
// destructeur
}
int toto::ecrire(char *)
{
// lignes
return 1;
}
int main(....)
{
toto titi* = new toto();
return_succes;
}
(pour la syntaxe c'est à peu près ça, j'ai l'habitude à l'autocompletion :-P )
Alors je sais pas faire du C++? ;-)
d'ailleurs j'en profite pour faire une annonce : je cherche un co developpeur pour mon moteur C++ SDL ;-)
Je voudrai juste réagir :
-> Pas tous les développeurs pensent comme, j'ai fait une petite recherche sur google, et j'y ai trouvé plusieurs, je peux te les passer si tu le souhaites
Citation :
Pour le malloc il n'est pas obligatoire, mais il est préférable d'apprendre correctement à programmer aux gens afin qu'ils prennent de bonne habitude depuis le début et qu'ils évitent de faire des choses qui marchent sans vraiment comprendre ce qui se passe, enfin c'est la philosophie que j'ai lorsque j'enseigne à mes étudiants-> Pas tous les développeurs pensent comme, j'ai fait une petite recherche sur google, et j'y ai trouvé plusieurs, je peux te les passer si tu le souhaites
Bonsoir à tous,
pour le if je sui d'accord avec poussinphp mais
ca resoud pas le prbl qui est que tu compare une chaine
de caractère dans un if ce qui est interdit.
Ensuite je n'ai pa dit que tu ne savais pa faire du C++ mais
que tu disais que ton code était en C++ alors qu'il n'ya rien du concept de l'objet...
Pour tebonb, bien sur que tu trouveras des developpeurs qui ne sont pa rigoureux,
seulement moi on ma apris comme ca, j'enseigne comme ca et j'ai demandé à mes collègues
ils font exactement la meme chose dont certains connaissent le C depuis qu'il existe...
D'ailleurs j'organise un projet avec des étudiants de divers universités, est ce que ca te dirai
de participé bibop vu que tu ma l'air rigoureux. Il s'agit de developper un jeu en utilisant Direct3D
et FMOD ?
Bouh343
pour le if je sui d'accord avec poussinphp mais
ca resoud pas le prbl qui est que tu compare une chaine
de caractère dans un if ce qui est interdit.
Ensuite je n'ai pa dit que tu ne savais pa faire du C++ mais
que tu disais que ton code était en C++ alors qu'il n'ya rien du concept de l'objet...
Pour tebonb, bien sur que tu trouveras des developpeurs qui ne sont pa rigoureux,
seulement moi on ma apris comme ca, j'enseigne comme ca et j'ai demandé à mes collègues
ils font exactement la meme chose dont certains connaissent le C depuis qu'il existe...
D'ailleurs j'organise un projet avec des étudiants de divers universités, est ce que ca te dirai
de participé bibop vu que tu ma l'air rigoureux. Il s'agit de developper un jeu en utilisant Direct3D
et FMOD ?
Bouh343
'Soir. Certaines universités disent aussi que ce n'est pas utile de caster un malloc. Ceci dit, chacun enseigne comme il le souhaite, je ne pense pas que ce sois question de rigoureux ou pas. Sur ce, je vais arrêter la discussion ici et je pense que tu es d'accord aussi pour dire que ce débat est interminable.
Bonne continuation à toi
Bonne continuation à toi
Lassé par la pub ? Créez un compte
- Contenus similaires :
- Solutionsproblème d'imprimante canon mp 250
- SolutionsProblème de code np pour portable ( déblocage)
- SolutionsProblème pour télécharger un jeu Xbox Live sur mon Windows Phone 7
- SolutionsProblème de recherches incohérentes sous Windows 7...
- Solutionsproblème d'apostrophes avec mes champs
- Solutionsproblème disque dur interne maxtor :(
- Solutionsprobleme de gestion de frequence ddr3 par carte mere
- Solutionsprobleme de mot de pass
- SolutionsProbleme execution des fichiers LNK
- Voir plus