Probleme de place en C
Résolu/Fermé
valgoku
Messages postés
187
Date d'inscription
lundi 17 avril 2006
Statut
Membre
Dernière intervention
22 janvier 2013
-
14 mars 2010 à 15:36
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 15 mars 2010 à 17:19
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 15 mars 2010 à 17:19
A voir également:
- Probleme de place en C
- Simulation place accor hotel arena - Forum Loisirs / Divertissements
- Peut on changer de place dans un concert - Forum Musique / Radio / Clip
- Dans le texte à télécharger, quel est le mot placé juste après le mot curriculum ? ✓ - Forum Bureautique
- Espace insuffisant alors que j'ai de la place - Forum Windows 7
- Purble place mac - Forum MacOS
7 réponses
valgoku
Messages postés
187
Date d'inscription
lundi 17 avril 2006
Statut
Membre
Dernière intervention
22 janvier 2013
47
14 mars 2010 à 15:49
14 mars 2010 à 15:49
Avertissement 1 warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\valentin\documents\visual studio 2008\projects\tri a bulles\tri a bulles\main.cpp 15 tri a bulles
Il me marque ca en warning.
Quand je mets le scanf_s quand je veux afficher à la fin, rien ne s'affiche, mais au moins je n'ai plus le probleme que j'avais avant.
Sachant que je ne sais pas ce que le scanf_s fait ,je ne peux résoudre seul ce probleme...
HELP ^^
Il me marque ca en warning.
Quand je mets le scanf_s quand je veux afficher à la fin, rien ne s'affiche, mais au moins je n'ai plus le probleme que j'avais avant.
Sachant que je ne sais pas ce que le scanf_s fait ,je ne peux résoudre seul ce probleme...
HELP ^^
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
14 mars 2010 à 16:09
14 mars 2010 à 16:09
Bonjour,
Il y a un problème effectivement avec le scanf.
char caract[NB_CHAR];
printf("Rentrez 7 lettres svp \n");
for(i=0;i<NB_CHAR;i++){
scanf("%s",&caract[i]);
}
Tu mets "rentrez 7 lettres", mais il faut en rentrer 5 puisque NB_CHAR vaut 6.
Ensuite, le scanf est incorrect : scanf("%s",caract); tout simplement fera l'affaire.
Et enfin, scanf() sans contrôle sur la taille est effectivement unsafe. Par contre, scanf_s n'est pas portable, donc à ne pas utiliser. Je te conseillerais d'utiliser tout simplement scanf("%5s",caract); et de vérifier que la fonction renvoie bien 1.
Cdlt,
Il y a un problème effectivement avec le scanf.
char caract[NB_CHAR];
printf("Rentrez 7 lettres svp \n");
for(i=0;i<NB_CHAR;i++){
scanf("%s",&caract[i]);
}
Tu mets "rentrez 7 lettres", mais il faut en rentrer 5 puisque NB_CHAR vaut 6.
Ensuite, le scanf est incorrect : scanf("%s",caract); tout simplement fera l'affaire.
Et enfin, scanf() sans contrôle sur la taille est effectivement unsafe. Par contre, scanf_s n'est pas portable, donc à ne pas utiliser. Je te conseillerais d'utiliser tout simplement scanf("%5s",caract); et de vérifier que la fonction renvoie bien 1.
Cdlt,
valgoku
Messages postés
187
Date d'inscription
lundi 17 avril 2006
Statut
Membre
Dernière intervention
22 janvier 2013
47
14 mars 2010 à 16:18
14 mars 2010 à 16:18
Alors pour le nombre de caractères rentrés ne t'inquiète pas, je le connais car je le code, c'est juste que j'ai oublié de le changer. ^^
Ensuite scanf("%s",caract); peut marcher ? Car là, tu vas stocker le caractère de l'utilisateur mais où ??
Quand je fais ca, quand je veux réafficher, j'ai des signes bizarre....
Ensuite scanf("%s",caract); peut marcher ? Car là, tu vas stocker le caractère de l'utilisateur mais où ??
Quand je fais ca, quand je veux réafficher, j'ai des signes bizarre....
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
14 mars 2010 à 16:44
14 mars 2010 à 16:44
scanf("%s",caract); peut marcher ?
Bien sûr, et c'est comme ça qu'il faut faire. Mais scanf("%5s", caract) est beaucoup mieux.
Par contre, cette façon (scanf("%s",&caract[i]);) est incorrect.
caract. Ce serait bon si tu mettais "%c" pour stocker caractère par caractère.
Mais là tu veux une chaîne de caractères.
Donc à la place de
for(i=0;i<NB_CHAR;i++){
scanf("%s",&caract[i]);
}
il faut mettre tout simplement : scanf("%5s", caract).
Le premier caractère tapé ira dans caract[0], le second dans caract[1], etc jusqu'au dernier caractère.
Cdlt,
Bien sûr, et c'est comme ça qu'il faut faire. Mais scanf("%5s", caract) est beaucoup mieux.
Par contre, cette façon (scanf("%s",&caract[i]);) est incorrect.
caract. Ce serait bon si tu mettais "%c" pour stocker caractère par caractère.
Mais là tu veux une chaîne de caractères.
Donc à la place de
for(i=0;i<NB_CHAR;i++){
scanf("%s",&caract[i]);
}
il faut mettre tout simplement : scanf("%5s", caract).
Le premier caractère tapé ira dans caract[0], le second dans caract[1], etc jusqu'au dernier caractère.
Cdlt,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
valgoku
Messages postés
187
Date d'inscription
lundi 17 avril 2006
Statut
Membre
Dernière intervention
22 janvier 2013
47
15 mars 2010 à 14:54
15 mars 2010 à 14:54
fiddy ! Merci pour tes conseils ! Et j'ai réussi à trouver mon erreur !!! :)
C'était aussi dans ma boucle ( oui car j'avais un pb de tri ^^). je mettais j != i alors que c'était j>i ^^
Merci à toi ! Ca fait plaisir d'avoir de l'aide ;)
Bonne journée !
@+++
C'était aussi dans ma boucle ( oui car j'avais un pb de tri ^^). je mettais j != i alors que c'était j>i ^^
Merci à toi ! Ca fait plaisir d'avoir de l'aide ;)
Bonne journée !
@+++
valgoku
Messages postés
187
Date d'inscription
lundi 17 avril 2006
Statut
Membre
Dernière intervention
22 janvier 2013
47
15 mars 2010 à 14:57
15 mars 2010 à 14:57
Par contre !!!!!!!!!!! ^^ J'ai toujours ce problème de waring sous Visual Studio ! Donc soit mon compilateur bug ! Soit JE SAIS PAS ^^ !
Sous Code blocks no pb ! Sous visual studio pb ! Donc allez savoir....
Sous Code blocks no pb ! Sous visual studio pb ! Donc allez savoir....
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
15 mars 2010 à 17:19
15 mars 2010 à 17:19
for(j=NB_CHAR-1;j>=0;j--){
if(caract[j-1] > caract[j]){
il y a aussi un autre problème. La condition de ta boucle va jusqu'à j = 0 inclu.
A la ligne d'après tu auras caract[-1] qui provoquera un segmentation fault.
Pour lavertissement sur scanf tu peux l'ignorer si tu as bien mis ce que je tai dit.
Mais effectivement scanf est une fonction très dangereuse si mal utilisée, ce qui represente une majorité des cas malheureusement.
Cdlt
if(caract[j-1] > caract[j]){
il y a aussi un autre problème. La condition de ta boucle va jusqu'à j = 0 inclu.
A la ligne d'après tu auras caract[-1] qui provoquera un segmentation fault.
Pour lavertissement sur scanf tu peux l'ignorer si tu as bien mis ce que je tai dit.
Mais effectivement scanf est une fonction très dangereuse si mal utilisée, ce qui represente une majorité des cas malheureusement.
Cdlt