Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3218 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Auteur Sujet :

Débuter en C

n°1423067
Elmoricq
Modérateur
Posté le 09-08-2006 à 17:10:17  profilanswer
 

Reprise du message précédent :
stream == flux
 
Voici quelques liens honteusement repris du site d'un forumeur d'ici :
http://mapage.noos.fr/emdel/init_c.htm#flux
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers

mood
Publicité
Posté le 09-08-2006 à 17:10:17  profilanswer
 

n°1423072
_darkalt3_
Proctopathe
Posté le 09-08-2006 à 17:11:58  profilanswer
 

stephaninho a écrit :

Remarque un peu hostile à mon goût et complètement inutile.  
 
Je ne viens pas sur un forum demander de l'aide pour qu'on me reponde comme ça, le titre est "débuter en C" pas "le plus doué en C"...  si je demande c'est par conséquent que je n'ai pas l'information.  
 
Merci d'etre plus courtois.


 
Pardon ?
 
Je peux aussi être moins courtois si tu veux vraiment voir ce que ca donne.
 
Je ne trouve pas avoir été hostile, je t'ai posé une question de bon sens: n'importe quel programmeur qui tente de faire quelque chose de bien se documente pendant son développement.
 
Tes dernières questions sont à la portée du premier venu qui utilise google ou un bouquin de C: Si t'as pas les informations, t'es quand meme capable dans pas mal de cas de la trouver toi même, surtout celles ci. Sinon passe à autre chose.


Message édité par _darkalt3_ le 09-08-2006 à 20:18:25
n°1423075
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 09-08-2006 à 17:13:47  profilanswer
 

stephaninho a écrit :

Remarque un peu hostile à mon goût et complètement inutile.  
 
Je ne viens pas sur un forum demander de l'aide pour qu'on me reponde comme ça, le titre est "débuter en C" pas "le plus doué en C"...  si je demande c'est par conséquent que je n'ai pas l'information. Il y surement des domaine ou tu es moins doué je suppose que tu n'aprécierai ce type de remarque, ça fait partie d'une certaine pédagogie.


ou alors que tu sais pas chercher... les streams étant expliqués dans tout tuto C digne de ce nom [:el g]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1423077
Elmoricq
Modérateur
Posté le 09-08-2006 à 17:14:23  profilanswer
 

Je suis d'accord avec _darkalt3_ , se documenter est l'une des bases à acquérir lorsque l'on programme.
C'est également la raison pour laquelle l'anglais est un pré-requis dans ce domaine.

n°1423081
stephaninh​o
Posté le 09-08-2006 à 17:15:56  profilanswer
 

J'ai un bouquin, visiblement pas terrible d'apres ce que g entendu. Il me donnent un programme je le decortique. Pour etre franc j'ai rarement vu des choses claire sur le net.. on voit 14 explications differentes.

Message cité 1 fois
Message édité par stephaninho le 09-08-2006 à 17:18:29
n°1423087
pains-aux-​raisins
Fatal error
Posté le 09-08-2006 à 17:18:41  profilanswer
 

Question philosophique, dans un post précédent, je mentionne qu'un stream est de type FIFO. Cependant, cela n'apparaît pas clairement dans les différentes définitions que me donnent google.
La question est : il y a t il des streams LIFO ou bien cela n'a t-il pas de sens (ce que je pense)...

n°1423090
Elmoricq
Modérateur
Posté le 09-08-2006 à 17:20:59  profilanswer
 

Hmm. Comme ça juste à coup de logique, je trouve ça étranger au concept de flux, le LIFO...

n°1423093
stephaninh​o
Posté le 09-08-2006 à 17:21:34  profilanswer
 

je me sens moins seul... :sarcastic:

n°1423097
Elmoricq
Modérateur
Posté le 09-08-2006 à 17:24:26  profilanswer
 

Pourquoi ? [:petrus dei]
 
(gaffe au smiley sarcastic)

n°1423098
_darkalt3_
Proctopathe
Posté le 09-08-2006 à 17:24:53  profilanswer
 

stephaninho a écrit :

J'ai un bouquin, visiblement pas terrible d'apres ce que g entendu. Il me donnent un programme je le decortique. Pour etre franc j'ai rarement vu des choses claire sur le net.. on voit 14 explications differentes.


 
En l'occurence il ne s'agit pas d'explications, mais de deux prototypes de fonctions différents, print et fprintf.

mood
Publicité
Posté le 09-08-2006 à 17:24:53  profilanswer
 

n°1423119
stephaninh​o
Posté le 09-08-2006 à 17:46:43  profilanswer
 

Oui ok, merci !  
 
j'utilise pour le moment le plus simple. J'en suis encore à comprendre la structure d'un programme... le chemin va être long !

n°1423294
Sve@r
Posté le 09-08-2006 à 22:42:04  profilanswer
 

stephaninho a écrit :

pourquoi il faut mettre main() sans rien dans les parentheses ?


C'est un peu particulier. La fonction "main" peut s'écrire avec aucun, un, deux ou 3 paramètres selon ton besoin. Chaque paramètre est un lien entre le programme et son environnement extèrieur.
 
Le premier paramètre est de type "int". Il contient le nombre d'arguments passés au programme (un argument étant une valeur située entre le nom du programme et la fin de la ligne style "mkdir toto" => "toto" est l'argument du programme "mkdir" ).
Ce paramètre est conventionnellement nommé "argc" pour "arg count" mais rien ne t'empêche de le nommer "zorglub" si t'en as envie.
Donc si t'as besoin d'avoir juste le nb d'arguments, tu peux écrire "int main (int argc)". Ensuite, dans ton programme, tu pourras à loisir utiliser cette variable "argc" chaque fois que tu voudras savoir combien d'arguments ont été passés à ton programme.
Ex:

int main (int argc)
{
    printf("Vous avez entré %d arguments\n", argc);
}


 
Le second paramètre contient la liste de tous les arguments. Evidemment très utile quand il faut les traiter. Un argument étant une chaîne et une chaîne se caractérisant par l'adresse du premier caractère (de type "char *" ), la liste de ces arguments est donc un tableau de chaînes ("char *[]" ) ou l'adresse de la première adresse ("char **" )
Cette variable est conventionnellement nommée "argv" pour "arg value" mais rien (hormis ta conscience) ne t'empêche de la nommer "popol".
Ainsi, si tu lances ton programme avec 3 arguments style
pgm toto titi tata
Alors "argv[0]" contiendra l'adresse du début de la chaîne "pgm" (le nom du programme lui-même), "argv[1]" contiendra l'adresse du début de la chaîne "toto", etc etc jusqu'à "argv[2]" qui contiendra l'adresse de début de la chaîne "tata". Et, particularité supplémentaire, "argv[3]" contiendra "NULL". Tu peux utiliser cette valeur particulière comme condition de fin ou bien utiliser "argc" à ton choix.
Ex:

int main (int argc, char *argv[])
{
    int i;
    printf("Vous avez entré %d arguments\n", argc);
    for (i=0; i < argc; i++)
        printf("L'argument n° %d est [%s]\n", i, argv[i]);
}


 
Le 3° paramètre contient la liste de toutes tes variables d'environnement. Cette notion d'environnement est très forte sous Unix et systèmes parallèles et un peu plus masquée sous "Windows" (il faut faire un "clic droit" dans "poste de travail" => propriétés" => onglet "avancé" => bouton "variables d'environnement" )
Grace à ce paramètre, tu peux donc récupérer la valeur de chaque variable dans ton programme.
Comme pour "argv", ce paramètre étant une liste de chaînes il est de type "char *[]" et on le nomme conventionnellement "envp" pour "environment program". Et comme pour "argv", il contient une valeur particulière à "NULL" pour marquer la fin de la liste.
Ex:

int main (int argc, char *argv[], char *envp[])
{
    char **pt;
    printf("Liste des variables d'environnement\n" );
    for (pt=envp; *pt != NULL; pt++)
        printf("La variable est [%s]\n", *pt);
}


 
Evidemment, si tu écris un programme qui n'a pas besoin de ces paramètres, ben tu ne les déclares pas dans le main et puis c'est tout...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1423297
Elmoricq
Modérateur
Posté le 09-08-2006 à 22:46:20  profilanswer
 

A ma connaissance, la norme n'admet que deux prototypes à main() :
 

int main(void);


et

int main(int argc, char **argv);


 
 
Je crois bien que le prototype à trois paramètres est obsolète, surtout avec la fonction getenv() définie en C89...

Message cité 2 fois
Message édité par Elmoricq le 09-08-2006 à 22:47:19
n°1423298
Trap D
Posté le 09-08-2006 à 22:50:17  profilanswer
 

char *envp[] n'est pas standard, donc ne fonctionnera pas avec tous les compilos.

n°1423299
Sve@r
Posté le 09-08-2006 à 22:52:12  profilanswer
 

Elmoricq a écrit :

A ma connaissance, la norme n'admet que deux prototypes à main() :
 

int main(void);


et

int main(int argc, char **argv);



C'est vrai que argc sans argv c'est un peu nul... mais le C ne serait pas ce qu'il est si on ne pouvait pas écrire des trucs idiots avec  :D  
 

Elmoricq a écrit :

Je crois bien que le prototype à trois paramètres est obsolète, surtout avec la fonction getenv() définie en C89...


Hum... je ne connais pas ce détail. C'est vrai que "getenv" est un bel avantage pour chercher une variable particulière plutôt que de se palucher tout envp à la main puis aller chercher le "=" pour se placer sur le char suivant...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1423303
big_dadi_f​at
Posté le 09-08-2006 à 22:57:34  profilanswer
 

Elmoricq a écrit :

A ma connaissance, la norme n'admet que deux prototypes à main() :
 

int main(void);


et

int main(int argc, char **argv);


 
 
Je crois bien que le prototype à trois paramètres est obsolète, surtout avec la fonction getenv() définie en C89...


 
 
salut tout le monde.
 
moi je me demande poirquoi il y a deux prototype pour la fonction main.
des fois on l'utilise avec le 1er et d'autre avec le 2eme , quel est la differance entre les deux ?
 
 

n°1423304
Trap D
Posté le 09-08-2006 à 22:59:54  profilanswer
 

je viens d'essayer avec Visual Studio 2005, ça tourne.

n°1423307
Trap D
Posté le 09-08-2006 à 23:00:42  profilanswer
 

Ça dépend si tu as besoin des arguments de la ligne d commande.

n°1423310
Elmoricq
Modérateur
Posté le 09-08-2006 à 23:02:01  profilanswer
 

big_dadi_fat a écrit :

salut tout le monde.
 
moi je me demande poirquoi il y a deux prototype pour la fonction main.
des fois on l'utilise avec le 1er et d'autre avec le 2eme , quel est la differance entre les deux ?


 
Eh bien si ton programme ne demande aucun paramètre, ça fait en tout cas plus propre de ne pas en définir puisque tu ne les utilises pas.
Un peu comme si tu écrivais une fonction admettant des paramètres, sans les utiliser.
 
Au-delà de ça, je ne pense pas qu'il y ait effectivement un grand intérêt.

n°1423311
big_dadi_f​at
Posté le 09-08-2006 à 23:02:04  profilanswer
 

Trap D a écrit :

Ça dépend si tu as besoin des arguments de la ligne d commande.


 :heink:  
 
 

n°1423312
Elmoricq
Modérateur
Posté le 09-08-2006 à 23:03:18  profilanswer
 


 
Exemple simple : le programme DOS xcopy.exe demande au moins deux paramètres pour fonctionner : la source et la cible.
Si xcopy.exe est codé en C, alors ces paramètres sont récupérés à partir des arguments de main().

n°1423315
big_dadi_f​at
Posté le 09-08-2006 à 23:13:30  profilanswer
 

Elmoricq a écrit :

Exemple simple : le programme DOS xcopy.exe demande au moins deux paramètres pour fonctionner : la source et la cible.
Si xcopy.exe est codé en C, alors ces paramètres sont récupérés à partir des arguments de main().


 
 
donc on les utilisent quand en fait apelle à des commende DOS dans notre programme ?
 
EDIT: excusez moi si ca parais idio cette question, je suis débutant.


Message édité par big_dadi_fat le 09-08-2006 à 23:14:24
n°1423316
Elmoricq
Modérateur
Posté le 09-08-2006 à 23:15:39  profilanswer
 

C'est pour la ligne de commande en général. Ca ne se limite pas au DOS qui est, rappelons-le, mort depuis quelques années déjà. ;)

n°1423319
big_dadi_f​at
Posté le 09-08-2006 à 23:22:31  profilanswer
 

Elmoricq a écrit :

C'est pour la ligne de commande en général. Ca ne se limite pas au DOS qui est, rappelons-le, mort depuis quelques années déjà. ;)


 
ok merci pour votre explication  :)  
 
 
 

n°1423523
Sve@r
Posté le 10-08-2006 à 11:41:35  profilanswer
 

big_dadi_fat a écrit :

moi je me demande poirquoi il y a deux prototype pour la fonction main.
des fois on l'utilise avec le 1er et d'autre avec le 2eme , quel est la differance entre les deux ?


 
Va lire mon post situé 4 rangs avant le tien !!! :non:  


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1423554
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-08-2006 à 12:09:22  profilanswer
 

stephaninho a écrit :

un stream c'est quoi ? pour finir la différence avec printf est ou ?
 
aussi, pourquoi il faut mettre main() sans rien dans les parentheses ?


Achète toi un livre de C. Un vrai. Des réferences sur le site de Developpez (ou le mien...)
 
Il existe aussi des tutoriels en ligne...
 
On ne peut pas passer notre temps à répondre à des questions aussi basiques...


---------------
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/
n°1423556
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-08-2006 à 12:12:38  profilanswer
 

Elmoricq a écrit :

C'est pour la ligne de commande en général. Ca ne se limite pas au DOS qui est, rappelons-le, mort depuis quelques années déjà. ;)


Ce qui est une fausse infomation, évidemment...


---------------
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/
n°1423557
Elmoricq
Modérateur
Posté le 10-08-2006 à 12:15:01  profilanswer
 

Uh ?
 
DOS n'est plus maintenu, non ? Et ce qu'on trouve depuis Win2k c'est une console, mais qui n'a rien à voir avec le DOS. Ne serait-ce parce que ce n'est plus un OS :o


Message édité par Elmoricq le 10-08-2006 à 12:15:56
n°1423602
stephaninh​o
Posté le 10-08-2006 à 13:20:39  profilanswer
 

Je sais bien Emmanuel, je compte m'en racheter un seulement le titre du topic veut bien dire que je debute et que les questions seront de toute facon basique. Peut etre que celle ci l'es trop et je comprend que ca puisse etre un peu fatiguant mais je ne m'en rend pas compte, j'aime comprendre tout ce que je fais.  
 
par exemple, ce programme, peut etre que ca te semblera bete comme question, mais j'ai un doute... le programme est explique pourtant mais j'ai tendance a bidouiller pour comprendre et la, en bidouillant quelquechose m'echape.
 
voici le programme : Il marche tres bien comme ça.
 
#include<stdio.h>  
 
int a, b, c;
 
int produit(int x, int y);
 
main()
{
      printf("Entrez un nombre :" );
      scanf("%d", &a);
       
      printf("Entrez un second nombre :" );
      scanf("%d", &b);
       
      c = produit(a, b);
      printf("\n %d fois %d = %d", a, b, c);
       
      return 0;
}
 
int produit(x ,y)
 
{
    return( x * y );
}
 
mon probleme est le suivant. J'utilise une fonction qui realise le produit de deux variable a et b. on demande le premier nombre, le second puis on dit que C est le produit des deux premier.. ça devrait suffire, pourquoi doit ont definir deux autres variables ?
 
C'est peut etre bete pour certain mais pour etre franc je mentirai si je disais que je n'en n'ai aucune idée, seulement j'aimerai une explication pour savoir si mon raisonnement est vraiment mauvais ou non.

n°1423622
_darkalt3_
Proctopathe
Posté le 10-08-2006 à 13:35:50  profilanswer
 

stephaninho a écrit :

mon probleme est le suivant. J'utilise une fonction qui realise le produit de deux variable a et b. on demande le premier nombre, le second puis on dit que C est le produit des deux premier.. ça devrait suffire, pourquoi doit ont definir deux autres variables ?


 
De quelles autres variables tu parles ?
x et y ?

n°1423629
stephaninh​o
Posté le 10-08-2006 à 13:39:27  profilanswer
 

C'est tres basique comme probleme ? enfin je ve dire, ce sont des questions qu'on se pose toujours ou c'est moi qui me prend la tete ?  
 
oui oui, je parle bien de x et y

n°1423631
Elmoricq
Modérateur
Posté le 10-08-2006 à 13:42:03  profilanswer
 

Il faut dire que l'emploi de variables globales entre un peu en conflit avec les paramètres de fonctions.
 
Dans le code posté ici, x et y font effectivement doublon avec a, b et c.
 
Ce qu'il faut savoir, stephaninho, c'est que normalement, on ne déclare pas de variables globales. Ca arrive, bien sûr, d'y faire appel, mais c'est normalement dans des conditions particulières, pas très courantes.
Normalement, a, b et c auraient dû être définies dans main().
 
Autre chose : n'utilise pas scanf() sans être certain de ce que fait cette fonction. Ce n'est pas le genre de fonction à utiliser à la légère, et si tu en veux une preuve, alors je t'encourage à saisir autre chose qu'un nombre lorsque ton programme le demande.
Utilise plutôt des fonctions comme fgets().

n°1423634
big_dadi_f​at
Posté le 10-08-2006 à 13:42:23  profilanswer
 

si tu parle de x et de y , alors sache qu'ils sont local à ta fonction produis, il sont utiliser que dans cette fonction . et que les variable a et b sont des variable local à ta fonction main (si tu les declare dans main et c'est ce que je te recommande ). mentenant si tu veut utiliser que a et b (meme dans la fonction produis) tu dois les déclarer en global , mais je te déconseille de le faire .
 
EDIT: oups j'avais pas vu que ta déclarer a et b en global , ....

Message cité 1 fois
Message édité par big_dadi_fat le 10-08-2006 à 13:45:44
n°1423635
Elmoricq
Modérateur
Posté le 10-08-2006 à 13:43:52  profilanswer
 

stephaninho a écrit :

C'est tres basique comme probleme ? enfin je ve dire, ce sont des questions qu'on se pose toujours ou c'est moi qui me prend la tete ?


 
Oui, c'est très basique.
Vraiment, procure-toi un autre livre d'urgence et, d'ici là, tu peux composer avec le site d'Emmanuel qui te donnera de bonnes bases : http://mapage.noos.fr/emdel
 
 

big_dadi_fat a écrit :

et que les variable a et b sont des variable localà ta fonction main .


 
Faux.


Message édité par Elmoricq le 10-08-2006 à 13:44:26
n°1423638
stephaninh​o
Posté le 10-08-2006 à 13:47:28  profilanswer
 

j'ai pige, faut que je change de livre de toute urgence...  
 
merci beaucoup en tout cas ! je vais immediatement jetter un oeil sur le site d'Emmanuel.

n°1423648
stephaninh​o
Posté le 10-08-2006 à 13:58:30  profilanswer
 

http://www.dunod.com/pages/ouvrage [...] id=4873401  
 
J'ai vu celui ci, j'en avais evidement entendu parlé jusqu'a ce qu'on me prete celui que j'ai. Evidement il ne peut que etre bien, s'il est fait par les concepteur du language seulement j'ai peur qu'il ne soit pas adapté à mon niveau... J'ai vu etudiant en 1ere année d'info, on est sencé ne pas connaitre grand chose.  
 
Vos avis ? une quille en C qui veut faire du C lol ! ;)

n°1423650
Elmoricq
Modérateur
Posté le 10-08-2006 à 14:01:53  profilanswer
 

Le lien ne fonctionne pas, mais si tu parles de "Le Langage C", de Kernighan&Ritchie, alors si, il est très bien.
 
Prends celui avec les corrigés d'exercices aussi, évidemment, sinon tu vas effectivement avoir du mal. :)

n°1423653
stephaninh​o
Posté le 10-08-2006 à 14:03:49  profilanswer
 

Tu penses que même pour un pur débutant il est adapté ? au prix j'aimerais ne pas faire d'erreur..

n°1423659
Elmoricq
Modérateur
Posté le 10-08-2006 à 14:08:37  profilanswer
 

Il t'apprendra à manier le langage C, de manière simple et efficace.
 
Sache néanmoins que cela ne suffira pas pour savoir programmer, puisqu'il te faudra aussi connaître l'algorithmique par exemple, mais pour le langage en lui-même, c'est un très bon livre, adapté à peu près à tous les niveaux.

n°1423664
_darkalt3_
Proctopathe
Posté le 10-08-2006 à 14:18:18  profilanswer
 

oui, voici le bon lien:
http://dunod.com/pages/ouvrages/fi [...] p?id=48734
 
C'est surtout un ouvrage de débutant en fait :) (comprendre : pour bien débuter)


Message édité par _darkalt3_ le 10-08-2006 à 14:18:34
n°1423667
Elmoricq
Modérateur
Posté le 10-08-2006 à 14:21:59  profilanswer
 

Attention : dans ce livre il y a des exercices, mais non corrigés.
A voir si tu aimes travailler sur des exercices ou non, ça dépend des gens.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4

Aller à :
Ajouter une réponse
 

Sujets relatifs
Choisir un langage pour débuter et en faire son métier[J2EE] Débuter en J2EE avec ce que fournit Sun
Debuter en C++ - Un bon Tuto en ligne mais sans C ![debuter en JSP] Ok mais avec quoi ? j'm'y perd...
Livre pour débuter en Java ?Débuter en programmation
[PHP] Quel bouquin pour bien debuterdébuter en vbs
débuter installation eclipse pblprobleme pour débuter java
Plus de sujets relatifs à : Débuter en C


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)