Tres Tres débutant !

Tres Tres débutant ! - C - Programmation

Marsh Posté le 29-10-2006 à 12:55:29    

Bonjour, je viens juste de me lancer pour de la programmation en C
 
j'ai fait ce code :  
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct pers {
  4.         char nom[25];
  5.         char prenom[25];
  6.         int age;
  7.         int sexe;
  8.         int titres[5];
  9.         } tsondes;
  10. // Création de la structure d'enregistrement d'un sondé...
  11. void saisie(tsondes*t, int nbpers) {
  12.     int i,j;
  13.     for(i=0;i<nbpers;i++) {
  14.         printf("NOM ?\n" );
  15.         scanf("%s", & t[i].nom);
  16.         printf("Prenom ?\n" );
  17.         scanf("%s", & t[i].prenom);
  18.         do {
  19.             printf("Age ? NB : 1 si -20ans et 2 si + de 20 ans\n" );
  20.             scanf("%i", & t[i].age);
  21.         } while(t[i].age !=1 && t[i].age != 2);
  22.         do {
  23.             printf("Sexe ? NB : 1 si H et 2 si F" );
  24.             scanf("%i", & t[i].sexe);
  25.         } while(t[i].sexe != 1 && t[i].sexe !=2);
  26.         for(j=0; j<5; j++) {
  27.             printf("Titre prefere n%i ?", j+1);
  28.             scanf("%i", & t[i].titres[j]);
  29.         }
  30.     }
  31. }
  32. // Action saisir les données des personnes sondées en fonction de Npers
  33. void afficher(tsondes*t, int nbpers) {
  34.     int i,j;
  35.     for(i=0; i<nbpers;i++) {
  36.         printf("Personne %i\n", i+1);
  37.         printf("\nNOM Prenom %s %s \n", t[i].nom, t[i].prenom);
  38.         if(t[i].age ==1) {
  39.             printf("\n %s a moins de 20 ans.\n", t[i].prenom);
  40.         } else {
  41.             printf("\n %s a plus de 20 ans.\n", t[i].prenom);
  42.         }
  43.         if(t[i].sexe == 1) {
  44.             printf("\n%s est un homme\n", t[i].prenom);
  45.         } else {
  46.             printf("\n%s est une femme\n" );
  47.         }
  48.         printf("Ces titres preferes sont :\n" );
  49.         for(j=0; j<5; j++) {
  50.             printf(" %i ", t[i].titres[j]);
  51.         }
  52.         printf("\n" );
  53.     }
  54. }
  55. // Vérifie si la saisie est bien effectuée !!!
  56. int titrecite(tsondes*t, int nbpers, int ti,int pos) {
  57.     int i;
  58.     int cpt=0;
  59.     for(i=0;i<nbpers;i++) {
  60.         if(t[i].titres[pos] == ti) {
  61.             cpt ++;
  62.         }
  63.     }
  64.     return cpt;
  65. }
  66. // Fonction qui permet de poser +1 au compteur a chaque fois qu'un titre mis au rang "pos" correspond au titre ti
  67. int notetitre(tsondes*t, int nbpers, int ti) {
  68.     int i;
  69.     int note=0;
  70.     for(i=0;i<5;i++) {
  71.         note = note+(5-i)*titrecite(t,nbpers,ti,i);
  72.     }
  73.     return note;
  74. }
  75. // on attribue une note au titre ti s'il se situe dans les 5 top du pos
  76. void notestitres(tsondes*t, int nbpers, int tab[50]) {
  77.     int i;
  78.     for(i=0;i<50;i++) {
  79.         tab[i] = notetitre(t, nbpers, i);
  80.     }
  81. }
  82. // Par ex : on met dans la case n°1 de tab la note du titre 1
  83. int imax(int t[50]) {
  84.     int i;
  85.     int m =0;
  86.     for(i=1; i<50; i++) {
  87.         if(t[i] > t[m]) {
  88.             m=i;
  89.         }
  90.     }
  91.     return m;
  92. }
  93. // Donne la case ou se trouve le titre le mieux noté
  94. void titrespop(tsondes*t, int nbpers, int ti[3]) {
  95.     int i;
  96.     int tab[50];
  97.     int ind;
  98.     notestitres(t, nbpers, tab);
  99.     for(i=0; i<3; i++) {
  100.         ind = imax(tab);
  101.         tab[ind] = imax(tab);
  102.         tab[ind] =-5;
  103.         ti[i] = ind;
  104.     }
  105. }
  106. // Les 3 titres populaires...ENFN !
  107. ///////////////////////GNU LICENCE//////////////////////////
  108. ////////////////////////////////////////////////////////////
  109. //DEFINIR LES PERSONNES QUI ONT TAPES LES TITRES POPULAIRE//
  110. ////////////////////////////////////////////////////////////
  111. ////////////////////////////////////////////////////////////
  112.     main() {
  113.     int nbpers;
  114.     int i;
  115.     tsondes *t;
  116.     int ti[3];
  117.     printf("Nombre de personnes sondees ?\n" );
  118.     scanf("%i", & nbpers);
  119.     t = (tsondes*)malloc(nbpers*sizeof(tsondes));
  120.     saisie(t, nbpers);
  121.     afficher(t, nbpers);
  122.     titrespop(t, nbpers, ti);
  123.     for(i=0;i<3;i++){
  124.         printf("%i", ti[i]);
  125.     }
  126. }


 
Le programme marche puisque Visual C++ Express me dit 0 erreur, le probleme, lorsque j'ai fini de saisir les données, le programme se ferme automatiquement sans me montrer le resultat, je vous repete, le porgramme marche...svp dite moi se qu'il ne va pas

Reply

Marsh Posté le 29-10-2006 à 12:55:29   

Reply

Marsh Posté le 29-10-2006 à 13:03:25    

guiguiXXX a écrit :

Le programme marche puisque Visual C++ Express me dit 0 erreur


Non. Aucune erreur de compilation ne veut pas dire aucune erreur de fonctionnement. Comment est-ce qu'une machine pourrait dire si un programme marche ? Toi seul peut l'affirmer. Et en l'ocurrence, ça ne fonctionne pas...


Message édité par FlorentG le 29-10-2006 à 13:03:38
Reply

Marsh Posté le 29-10-2006 à 13:07:09    

je veux dire je suis certain et certain a 100% qu'il marche puisque ce code, je l'ai crée dans mon ecole sous Linux/KDE et le résultat était génial, je voulais l'amelioré chez moi, c'est a dire maintenant et il se trouve qu'il me fait correctement le programme par contre quand il veut afficher le résultat des personnes sondées par ordre croissant, il se ferme
 
petit truc, quand je mets juste printf("Salut" ); et que je lance le programme, il se ferme sans l'afficher !!!
 
je crois que la, il y a quelqun'un qui peut me dire ou se trouve mon problème ??

Reply

Marsh Posté le 29-10-2006 à 13:11:49    

Spoiler :



system("pause" );


Message édité par 0x90 le 29-10-2006 à 13:12:11
Reply

Marsh Posté le 29-10-2006 à 13:41:49    

guiguiXXX a écrit :

petit truc, quand je mets juste printf("Salut" ); et que je lance le programme, il se ferme sans l'afficher !!!


J'ai une question... Tu le lances comment ? [:johneh]  
 
Si tu double-clique sur le .Exe, c'est normal, c'est le comportement standard d'un programme DOS sous windows : une fois retourné du main, il ferme la fenêtre. Faut aller dans les propriétés du .exe, et décocher la case "Fermer en quittant" je sais plus où [:dawak]

Reply

Marsh Posté le 29-10-2006 à 13:46:54    

FlorentG a écrit :

J'ai une question... Tu le lances comment ? [:johneh]  
 
Si tu double-clique sur le .Exe, c'est normal, c'est le comportement standard d'un programme DOS sous windows : une fois retourné du main, il ferme la fenêtre. Faut aller dans les propriétés du .exe, et décocher la case "Fermer en quittant" je sais plus où [:dawak]


Ou alors tu le lances depuis le shell :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-10-2006 à 13:47:16    

Doucement, il est débutant :o

Reply

Marsh Posté le 29-10-2006 à 13:47:43    

Il a dit que c'était initialement codé sous Linux, donc avec un shell :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-10-2006 à 13:54:44    

guiguiXXX a écrit :

Bonjour, je viens juste de me lancer pour de la programmation en C
 
j'ai fait ce code :  
 
Le programme marche puisque Visual C++ Express me dit 0 erreur, le probleme, lorsque j'ai fini de saisir les données, le programme se ferme automatiquement sans me montrer le resultat, je vous repete, le porgramme marche...svp dite moi se qu'il ne va pas


Alors change de compilateur ou apprend à le regler...
 
http://mapage.noos.fr/emdel/codage.htm#cfg_compilo


Project   : Forums
Compiler  : GNU GCC Compiler (called directly)
Directory : C:\dev\forums2\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.c
main.c: In function `saisie':
main.c:17: warning: char format, different type arg (arg 2)
main.c:19: warning: char format, different type arg (arg 2)
main.c: In function `afficher':
main.c:49: warning: too few arguments for format
main.c: At top level:
main.c:127: warning: return type defaults to `int'
main.c: In function `main':
main.c:143: warning: control reaches end of non-void function
Linking console executable: C:\dev\forums2\console.exe
Process terminated with status 0 (0 minutes, 3 seconds)
0 errors, 5 warnings


Les entrées sont faites avec scanf(). Or ici, il est mal utilisé et à la moindre erreur de frappe, c'est le drame...
 
Il faut apprendre à faire des entrées sécurisées à base de fgetc() ou de fgets().
 
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers


Message édité par Emmanuel Delahaye le 29-10-2006 à 14:33:04

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 29-10-2006 à 14:46:22    

Pour repondre a Emmanuel D elahaye :: D'accord mais ce que je n'arrive pas à comprendre, pourquoi sous linux, il me mets : "ok" ???
 
FlorentG : C'est ou la fameuse option : "fermer manuellement le programme DOS" ??
 
et pour les autres :: C'est quoi un shell
 
je suis vraiment dsl, j'ai l'air d'un fameux boulet mais je peux pas continuer mes développement a cause de ça et ça m'agace....
 
HELP¨...
 

Reply

Marsh Posté le 29-10-2006 à 14:46:22   

Reply

Marsh Posté le 29-10-2006 à 14:48:51    

guiguiXXX a écrit :

et pour les autres :: C'est quoi un shell


C'est la ligne de commande, la fenêtre DOS sous windows.
 
Ici, ton programme fonctionne mais après avoir affiché son résultat le programme se termine et la fenêtre se ferme, ne te laissant pas le temps de voir la sortie.
 
Pour avoir une fenêtre DOS, vas dans le menu Démarrer > Exécuter et tape "cmd", puis valide. Ca va t'ouvrir une fenêtre DOS, lance ton programme grâce à elle et tu verras tout bien marcher.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-10-2006 à 14:49:49    

guiguiXXX a écrit :

Pour repondre a Emmanuel D elahaye :: D'accord mais ce que je n'arrive pas à comprendre, pourquoi sous linux, il me mets : "ok" ???


Je t'ai pourtant donné un lien qui explique pourquoi. Ton compilateur est mal configuré.  
 
A part faire ici un copié/collé de l'article, je ne vois pas ce que je peux ajouter de plus.
 
Tu utilises gcc sous Linux ? Quelle est ta ligne de commande ?


Message édité par Emmanuel Delahaye le 29-10-2006 à 14:51:41

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 29-10-2006 à 14:51:38    

nan, j'utilise Microsoft Visual C++ Express...et la, je ne sais pas comment faire pour modifier mon compilateur

Reply

Marsh Posté le 29-10-2006 à 14:53:10    

guiguiXXX a écrit :

nan, j'utilise Microsoft Visual C++ Express...et la, je ne sais pas comment faire pour modifier mon compilateur


, ils savent.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 29-10-2006 à 14:56:04    

guiguiXXX a écrit :

nan, j'utilise Microsoft Visual C++ Express...et la, je ne sais pas comment faire pour modifier mon compilateur


Projet/Options, "Propriétés de configuration
 


moi aussi je sais hein :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-10-2006 à 14:56:48    

Masklinn : Merci, c'est sympa, ça marche, mais tu ne crois pas que la méthode pour avoir mon résultat est un peu fastidieuse ??? parce que quand mes programme seront plus complexe...faire exe>cdm>test.exe...en sachant que pendant les phases de maintenance, j'en aurais vite marre...mais dans le fond, ce que tu ma dis marche...merci, mais si t'a une autre aide

Reply

Marsh Posté le 29-10-2006 à 14:57:33    

guiguiXXX a écrit :

en sachant que pendant les phases de maintenance, j'en aurais vite marre...


Abandonne la prog :(

Reply

Marsh Posté le 29-10-2006 à 14:59:36    

guiguiXXX a écrit :

 
Le programme marche puisque Visual C++ Express me dit 0 erreur, le probleme, lorsque j'ai fini de saisir les données, le programme se ferme automatiquement sans me montrer le resultat, je vous repete, le porgramme marche...svp dite moi se qu'il ne va pas


on doit pas utiliser le même VC++ Express, parce que moi en ne touchant à aucune option et en compilant ton code brut de pomme, j'ai ça [:petrus75]
 

Citation :


Compilation en cours...
main.cpp
c:\documents and settings\xavier\mes documents\visual studio 2005\projects\hack\hack\main.cpp(17) : warning C4996: 'scanf' a été déclaré désapprouvé
        c:\program files\microsoft visual studio 8\vc\include\stdio.h(295) : voir la déclaration de 'scanf'
        Message : 'This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
c:\documents and settings\xavier\mes documents\visual studio 2005\projects\hack\hack\main.cpp(19) : warning C4996: 'scanf' a été déclaré désapprouvé
        c:\program files\microsoft visual studio 8\vc\include\stdio.h(295) : voir la déclaration de 'scanf'
        Message : 'This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
c:\documents and settings\xavier\mes documents\visual studio 2005\projects\hack\hack\main.cpp(22) : warning C4996: 'scanf' a été déclaré désapprouvé
        c:\program files\microsoft visual studio 8\vc\include\stdio.h(295) : voir la déclaration de 'scanf'
        Message : 'This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
c:\documents and settings\xavier\mes documents\visual studio 2005\projects\hack\hack\main.cpp(26) : warning C4996: 'scanf' a été déclaré désapprouvé
        c:\program files\microsoft visual studio 8\vc\include\stdio.h(295) : voir la déclaration de 'scanf'
        Message : 'This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
c:\documents and settings\xavier\mes documents\visual studio 2005\projects\hack\hack\main.cpp(30) : warning C4996: 'scanf' a été déclaré désapprouvé
        c:\program files\microsoft visual studio 8\vc\include\stdio.h(295) : voir la déclaration de 'scanf'
        Message : 'This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
c:\documents and settings\xavier\mes documents\visual studio 2005\projects\hack\hack\main.cpp(127) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut
Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\Xavier\Mes documents\Visual Studio 2005\Projects\hack\hack\Debug\BuildLog.htm"
hack - 1 erreur(s), 5 avertissement(s)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-10-2006 à 15:03:06    

bah, je sais pas, regarde ou j'ai faux, mais je le repète, j'ai fait la méthode executer>cdm>....>test.exe ! et la le programme marche nickel mais quand je fais ça dans Visual C++ (8.0) 2005, il couille....

Reply

Marsh Posté le 29-10-2006 à 15:04:12    

Harkonnen a écrit :

on doit pas utiliser le même VC++ Express, parce que moi en ne touchant à aucune option et en compilant ton code brut de pomme, j'ai ça [:petrus75]
 

Citation :


Compilation en cours...
main.cpp<...>



Ahem...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 29-10-2006 à 15:19:30    


ah merde [:petrus75]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-10-2006 à 15:20:58    

mais ça m'arrange pas....moi !!! je fais quoi ???

Reply

Marsh Posté le 29-10-2006 à 16:49:18    

mets un getchar(); à la fin du main

Reply

Marsh Posté le 29-10-2006 à 17:52:06    

guiguiXXX a écrit :

mais ça m'arrange pas....moi !!! je fais quoi ???


tu déchiffres la liste de warnings de manu et tu les corriges ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-10-2006 à 23:44:16    

fhr a écrit :

mets un getchar(); à la fin du main


 
ça ne marche pas !!
 

Harkonnen a écrit :

tu déchiffres la liste de warnings de manu et tu les corriges ?


 
DSL, mais mon script marche !
 
rah, j'enrage, je dois être le seul boulet à pas savoir configurer !!!
 

Reply

Marsh Posté le 30-10-2006 à 00:23:51    

ouh purée ! [:mlc]
tout comme il est obligatoire de suivre un stage de gestion avant de monter une entreprise, il devrait être obligatoire de suivre des "cours d'OS" (windows ou linux) avant d'apprendre à programmer !
 
bon, on reprend !
- Démarrer->Exécuter->cmd (je parle du menu Démarrer de win hein)
- une fois dans l'invite de commandes, tape "cd xxxx", où "xxxx" est le chemin d'accés vers ton exécutable (que j'appellerais ici "prog.exe" ) et Entrée
- tape ensuite "prog.exe" et O magie, le programme ne se ferme plus !
 
mais bon, ça sert à quoi si tu te contre carres de ce qu'on te dit : ton programme n'est pas correct, et il a toutes les chances de te péter au nez avec tes scanf à la con pour lesquels tu ne controles même pas ce que tu leur files à bouffer !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-10-2006 à 09:11:47    

Juste au passage, je pense qu'il voulait juste un petit CTRL+F5 pour exécuter son biniou et faire en sorte que la fenêtre ne se referme pas après...

Reply

Marsh Posté le 30-10-2006 à 12:11:04    

peut etre qu'un system("pause" ) au bon endroit empecherait la fermeture du programme avant de n'avoir lu le resultat


Message édité par Zoltan87 le 30-10-2006 à 12:11:25

---------------
-- Zoltan --
Reply

Marsh Posté le 30-10-2006 à 13:28:39    

Harkonnen a écrit :

ouh purée ! [:mlc]
tout comme il est obligatoire de suivre un stage de gestion avant de monter une entreprise, il devrait être obligatoire de suivre des "cours d'OS" (windows ou linux) avant d'apprendre à programmer !
 
bon, on reprend !
- Démarrer->Exécuter->cmd (je parle du menu Démarrer de win hein)
- une fois dans l'invite de commandes, tape "cd xxxx", où "xxxx" est le chemin d'accés vers ton exécutable (que j'appellerais ici "prog.exe" ) et Entrée
- tape ensuite "prog.exe" et O magie, le programme ne se ferme plus !
 
mais bon, ça sert à quoi si tu te contre carres de ce qu'on te dit : ton programme n'est pas correct, et il a toutes les chances de te péter au nez avec tes scanf à la con pour lesquels tu ne controles même pas ce que tu leur files à bouffer !


 
merçi sa je savais mais se que je veux dire quand le programme prendra de l'ampleur refaire ça sera tres fasridieux !!!!
 
 

Reply

Marsh Posté le 30-10-2006 à 13:29:51    

guiguiXXX a écrit :

merçi sa je savais mais se que je veux dire quand le programme prendra de l'ampleur refaire ça sera tres fasridieux !!!!


Olalala  [:johneh]  [:johneh]

Reply

Marsh Posté le 30-10-2006 à 14:05:12    

guiguiXXX a écrit :

merçi sa je savais mais se que je veux dire quand le programme prendra de l'ampleur refaire ça sera tres fasridieux !!!!


Je ne vois pas où es ton probléme  :pfff:  
 

Reply

Marsh Posté le 30-10-2006 à 14:08:36    

Je sent qu'on va en retrouver certain noyé dans une goutte d'eau...

Reply

Marsh Posté le 30-10-2006 à 14:10:13    

guiguiXXX a écrit :

merçi sa je savais mais se que je veux dire quand le programme prendra de l'ampleur refaire ça sera tres fasridieux !!!!


fastidieux ? [:mlc]
purée, mais t'as un gros poil dans la main toi hein ! alors tu sais ce que tu fais si tu ne veux pas te faire chier avec la console ? ben au lieu de coder un projet console, tu codes un projet avec interface graphique et puis voilà [:heink]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-10-2006 à 23:07:31    

attends, il va devoir coder l'interface graphique...  [:kzimir]
sinon, ça me "choque" un peu le code tout en haut : c'est un programme fait "à l'école" et que vois-je : int main()
[:kzimir][:kzimir]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed