[C] Petites questions (débutant)

Petites questions (débutant) [C] - C - Programmation

Marsh Posté le 27-02-2010 à 12:04:50    

Bonjour à tous.
 
Cela va faire 2 jours que j'ai débuté dans la programmation, en m'attaquant au langage C (On ma dit que c'était pas mal pour débuter, pas le plus simple mais que cela servirait par la suite) à l'aide d'un livre acheter d'occasion chez gibert => "Le langage c" Peter Aitken et Bradley L.Jones. (titre original :Teach Yourself C in 21 days).
 
Bref je suis vraiment un gros débutant.
 
Donc cela fait 2 fois de suite que j'ai une erreur en compilant un programme sur la même ligne. La première fois j'ai pas pu définir d'ou venait l'erreur et cette fois pareil même si je pressent que c'est une fonction qui fait appel à une bibliothèque que je possède mais celle ci ne doit pas avoir la fonction en question ou je ne sais quoi encore ?
 
Voici le code :  
 
#include <stdio.h>
#include <stdlib.h> /* Dans le livre cet include n'est pas noté, mais je l'ai rajouter sinon j'ai une erreur sur "exit (EXIT_SUCCESS);"  */
int main()
{
    char buffer[256];
 
    printf("Entrez votre nom et appuyez sur Entrée :\n" );
    lire_clavier(buffer, sizeof(buffer));    /* L'erreur se trouve ici, cf en bas pour le message */
    printf("\nVotre nom contient %d caractères." , strlen(buffer));
 
    exit (EXIT_SUCCESS);
}
 
Message d'erreur : Undefined reference to `_lire_clavier'
 
+ 2 warnings mais je suppose que ce n'est pas forcément grave :
 
warning: implicit declaration of function `lire clavier'
warning: implicit declaration of function  `strlen'
 
Merci d'avance.
 
 
 

Reply

Marsh Posté le 27-02-2010 à 12:04:50   

Reply

Marsh Posté le 27-02-2010 à 14:00:15    

"lire_clavier" n'a évidemment jamais fait partie des fonctions du C : ton compilo t'avertis que tu lui parles d'un truc qu'il n'a jamais vu. Quelque part dans ton bouquin tu dois avoir la définition de la fonction.
Et pour strlen tu as besoin de #include <string.h>.
Il fait un peu peur ton bouquin si il commence comme ça...


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 27-02-2010 à 14:30:47    

Honnêtement il me semble pas qu'il y ai eu une définition de la fonction précédemment. Le livre y fessait référence dans un programme nommé "perroquet", il demandais simplement de recopier le code source et de compiler et le même problème est apparus.
 
Donc si j'ai bien compris, soit il manque une biblio associé à cette fonction soit il manque la définition de la fonction ?
 
Donc je vais vérifier dans le bouquin si la définition est donnée mais j'en doute fort.
 
J'ai essayer à tout hasard en mettant read_keyboard mais bien sur cela n'a rien donné ^^

Reply

Marsh Posté le 27-02-2010 à 15:02:40    

Débuter la programmation avec le C, c'est peut-être un peu rude?

Reply

Marsh Posté le 27-02-2010 à 15:17:34    

Edit : Je viens d'effacer le message qui était ici. En fait comme 95% des problèmes informatique, mon problème n'était pas un oublis des rédacteurs ou un bug mais il se trouvait entre la chaise et l'écran. (Ceci dit ils ont quand même oublier un ; sur le programme perroquet)
 
J'ai bien relus le livre et juste avant un programme qui utilise pour la première fois lire_clavier (perroquet) il y a écrit :
 
"Ce programme contient d'ailleurs une fonction qui sera utilisée tout au long de cet ouvrage : lire_clavier(). Vous devrez la recopier telle quelle dans chaque programme qui y fait appel"
 
J'avais pas lu cette ligne ou alors j'ai pas percuté, donc je suppose qu'ils ont fait cela pour pas avoir a ré imprimer à chaque utilisation de lire_clavier toute la définition de fonction qui fait 20 lignes.
 
Du coup cela succite une nouvelle intérogation, pourrais je ajouter cette définition de fonction à une bibliothèque pour ne plus avoir à la retaper a chaque fois et en ayant finalement juste a faire un #include <Osef.h> ??
 
 
Ps 2 : Thomase = > Oui on ma dit que débuter par le C n'était pas forcément le plus simple, mais que c'était faisable et qu'ensuite j'aurais des facilités pour le reste, de plus le langage C du moins le C++ est apparemment toujours très utilisé de nos jours, voila pourquoi je m'attaque à ce langage. Je suis conscient que je vais en bavé mais là est tout l'intérêt justement.


Message édité par osmoz86 le 27-02-2010 à 15:48:42
Reply

Marsh Posté le 27-02-2010 à 17:04:59    

Salut
Oui, on peut créer une bibliothèque qui contient ta fonction pour éviter de la réécrire à chaque fois. Cependant je ne suis pas sûr que cela soit une étape essentielle pour débuter. Par contre créer des fichiers .h et .c qui contiennent la déclaration et la définition de ta fonction te permettrait de la réutiliser dans plusieurs projets en simplement copiant/collant les fichiers. Le but étant de te familiariser avec les étapes de compilation et édition de liens (pour des projets contenant plusieurs fichiers). Ces étapes sont essentielles pour pouvoir créer une bibliothèque.
 
Quant à conseiller un langage pour débuter, ça ressemble la plupart du temps à un gros troll.


Message édité par ptitchep le 27-02-2010 à 17:07:20

---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 27-02-2010 à 17:54:52    

Merci pour ta réponse mais c'est pas très clair (pour moi)
 
Tu veut veut dire que tu me conseil de crée une sorte de modèle de base, genre au lieu de commencer avec un fichier vierge, je commence avec mon fichier contenant la définition de la fonction ?
 
Pour ce qui est du troll, tu parle du fait de conseiller le C pour débuter ?
 
Merci

Message cité 1 fois
Message édité par osmoz86 le 27-02-2010 à 17:56:19
Reply

Marsh Posté le 27-02-2010 à 21:23:09    

Non, je pense qu'il a plutôt voulu dire que recommander un langage au détriment de tous les autres pour débuter est sans objet si on ne sait pas quels sont les objectifs du développeur derrière.

 

Par exemple le C a l'avantage d'avoir une syntaxe stricte et d'obliger le développeur à réfléchir un minimum (ex : allocation de la mémoire), en contrepartie c'est un langage assez bas niveau où certains trucs pourtant triviaux en apparence sont une véritable plaie (les IOs en général, qu'il s'agisse du clavier ou de fichiers) et avec lequel tu n'iras sans doute pas au dela du stade du petit programme console, et sans aucun support objet.

 

Après tu pourrais très bien débuter sur un RAD ou un L4G. Ca te permet d'aller beaucoup plus loin plus vite, mais au risque que la machine se tape tout le boulot à ta place ce qui te fait dispense à tort de réfléchir à ce qui se passe en vrai dans le PC (ex : garbage collector).
Ou encore un langage laxiste à la syntaxe délirante (je ne citerai pas celui auquel je pense) qui là aussi te permet de faire beaucoup de choses sans te casser la tête mais t'inculque de mauvais réflexes.
Ou encore un langage objet, ou fonctionnel, ou logique. Etc. Chacun voit midi à sa porte. Il n'y a aucune raison pour que le C soit meilleur qu'un autre langage.

 

Ce que je dis est très caricatural pour me faire comprendre, merci aux puristes d'éviter de grimper sur leurs grands chevaux...

Message cité 1 fois
Message édité par TotalRecall le 27-02-2010 à 21:24:47

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 28-02-2010 à 00:11:04    

Laol ! Heureusement que c'est "caricatural pour te faire comprendre" parce que déjà que j'ai du mal ^^
 
Niveau langage technique j'ai pas compris grand chose (qu'est ce qu'un IOs ? ^^) par contre j'ai compris le sens de ton message.
 
Mes objectifs ne sont pas pour le moment de faire quelque chose de la programmation, je ne veut pas apprendre a programmer pour le résultat, je veut apprendre a programmer pour programmer, dans un premier temps du moins.
 
Et vu ton message, cela me conforte une fois de plus dans mon choix :)
 
Je n'ai jamais dit que le C était le meilleur (enfin je crois pas ?) mais une fois que j'aurais passer cette épreuve cela sera plus facile ( a ce qu'on ma dit) et peut importe si je galère au début, je m'éclate vraiment depuis que j'ai commencer en tout cas.
 
Bref mon problème de base est résolu, ceci dit je suis preneur de tout conseils pour un débutant en programmation comme moi (plus particulièrement autour du C
 
Des livres / sites webs, des astuces ou tout ce que vous jugerais utile.
 
Merci à vous.

Reply

Marsh Posté le 28-02-2010 à 08:07:46    

les cours sur le net sont souvent médiocres, sauf si fait par quelques rares enseignant du supérieur qui si connaissent vraiment. (y a svear par exemple qui en a un trés bien, ou Emmanuel Delahaye qui a des pages de très bonnes qualités). Evite à tout prix le siteduzero et autre billevesées menées par des gamins de 12 ans.

Reply

Marsh Posté le 28-02-2010 à 08:07:46   

Reply

Marsh Posté le 28-02-2010 à 09:46:56    

Tiens ? J'avais commencer avant d'acheter ce livre par le site du zero, pour avoir un aperçus. C'est ce que j'ai eu, c'est vrai que c'est pas fameux, m'enfin.. D'ou te viens cette aversion profonde pour le site du zéro ? peut tu développer quelques arguments ? (n'ont pas que je critique ton points de vue, mais je suis curieux de savoir)


Message édité par osmoz86 le 28-02-2010 à 10:18:55
Reply

Marsh Posté le 28-02-2010 à 16:49:57    

ils ne donnent pas les bases, mélangent allègrement C, C++, IDE, bibliothèque etc... sans parler de "la kalité redationel lol"

Reply

Marsh Posté le 01-03-2010 à 09:37:01    

Daccord.

Reply

Marsh Posté le 01-03-2010 à 10:22:50    

TotalRecall a écrit :

Non, je pense qu'il a plutôt voulu dire que recommander un langage au détriment de tous les autres pour débuter est sans objet si on ne sait pas quels sont les objectifs du développeur derrière.


Exactement.
 

osmoz86 a écrit :

Merci pour ta réponse mais c'est pas très clair (pour moi)
 
Tu veut veut dire que tu me conseil de crée une sorte de modèle de base, genre au lieu de commencer avec un fichier vierge, je commence avec mon fichier contenant la définition de la fonction ?
 
Pour ce qui est du troll, tu parle du fait de conseiller le C pour débuter ?
 
Merci


Ce que je veux dire c'est que tu auras largement le temps de créer des bibliothèques plus tard. Pour l'instant si j'ai bien compris, tu cherches à apprendre à programmer. Familiarise toi avec l'algorithmie, les principes de fonctionnement de l'ordinateur, codage, compilation, édition de liens, interprétation, etc. Et si ça passe par un effort de copier/coller une fonction/un fichier que tu utilises dans plusieurs programmes ce n'est pas la mer à boire.
Cela dit, ta question n'est pas bête et l'idée de faire quelque chose de réutilisable plusieurs fois et sans efforts colle tout à fait à la philosophie de la programmation. L'informaticien est un feignant. Seulement il faut commencer (malheureusement) par des efforts... Donc pour l'instant, code! Il n'y a qu'en pratiquant que l'on apprend.


---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 01-03-2010 à 14:00:06    

En ce qui concerne l'algorithmie en programmation, cela fait plusieurs fois que j'en entends parler mais je ne suis pas sur de comprendre.
 
Je sais ce que c'est qu'un algorithme en maths, mais en programmation..
Est ce que cela corresponds aux fonctions du type :
 
If
Faire ca
Else if
Faire ci
Else
Faire cecicela  
 
??

Reply

Marsh Posté le 01-03-2010 à 19:04:22    

oui en gros
http://fr.wikipedia.org/wiki/Algorithmique

 

édit: c'est différent un algorithme en math?


Message édité par ptitchep le 01-03-2010 à 19:05:44

---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 01-03-2010 à 22:52:16    

Disons que sans entrer dans le formalisme qu'il y a derrière (que ce soit dans la notation ou les principes mathématiques sous jacents comme la notion de complexité) que c'est le fait de réfléchir à l'organisation logique de ton programme avant d'écrire la moindre ligne de code : qu'est ce que tu as en entrée, comment tu t'en sers pour produire ce que tu veux en sortie, etc.
L'idée de fond est de mettre sur le papier les paramètres essentiels avant de te lancer dans le dév, ceci afin de structurer au mieux le programme et faire les choix techniques pertinents en fonction du besoin à assumer pour ne pas réécrire 3 fois un truc en se rendant compte à chaque fois qu'on avait oublié quelque chose avant d'avoir le résultat attendu, ou se retrouver avec une usine à gaz en code spaghetti.
Donc c'est l'expression humainement intelligible de ce que tu veux faire avant de le transcrire dans le langage de l'ordinateur.


Message édité par TotalRecall le 01-03-2010 à 22:55:08

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 04-03-2010 à 08:23:27    

Joel F a écrit :

... (y a svear par exemple qui en a un trés bien, ou Emmanuel Delahaye qui a des pages de très bonnes qualités)


Hey !!! Ca fait plaisir !!! :jap:
 
Pour ceux que ça intéresse, mes cours sont ici http://fr.lang.free.fr/cours/index.html. On y trouvera aussi un lien vers ceux de Emmanuel.
 
Et pour osmoz86 qui ne comprend pas bien la notion de librairie et son fonctionnement, je conseille http://fr.lang.free.fr/cours/Gener [...] t_v1.0.pdf où il est expliqué pas à pas la création et l'utilisation d'une librairie perso. Malheureusement c'est un tuto fait pour être utilisé sur un Unixlike donc il peut y avoir des petites différences avec zindow


Message édité par Sve@r le 04-03-2010 à 08:25:01

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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