SAISIE CLAVIER EN C

YvesB73 Messages postés 5 Date d'inscription mardi 20 janvier 2009 Statut Membre Dernière intervention 7 mars 2009 - 16 févr. 2009 à 21:09
YvesB73 Messages postés 5 Date d'inscription mardi 20 janvier 2009 Statut Membre Dernière intervention 7 mars 2009 - 7 mars 2009 à 19:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49263-saisie-clavier-en-c

YvesB73 Messages postés 5 Date d'inscription mardi 20 janvier 2009 Statut Membre Dernière intervention 7 mars 2009
7 mars 2009 à 19:54
Effectivement la conversation dérape car la première question que je me suis posé en voyant ce code, c’est la portabilité et l’avenir du C et je m’efforce de faire avaler du C, du C++ et du code managé dans des applications console qui acceptent les extensions managées.
Du bidouillage certes mais cela dans un but : utiliser ce qu’il y à de bon dans le C.
Je vois d’ici la réponse, pourquoi utiliser un interpréteur comme le Net Framework alors qu’il serait si simple de passer outre.
La réponse qu’il me vient a l’esprit est celle-ci : Le net Framework n'est bien peut de choses aujourd’hui.
Mais demain ne serait ce pas la solution pour pouvoir en finir avec les problèmes de portabilité.
Le Net Framework serait-t-il portable au même titre que la machine virtuel Java ?
Ceci n’est bien sur que de la science fiction mais je me suis permis d’anticiper sur la pensé des développeurs de chez Microsoft
Mais ce n’est pas le sujet de ce topic !!!
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
6 mars 2009 à 23:01
On dérive un peu du sujet.
Sachez juste que si les Fenêtre vous semble trop compliqué ou trop long (bien qu'en 10 lignes c'est résolu) il vous reste les boîtes de dialogue.
Je vous conseille de voir ici pour un éditeur gratuit et très bien fait : http://www.resedit.net/
YvesB73 Messages postés 5 Date d'inscription mardi 20 janvier 2009 Statut Membre Dernière intervention 7 mars 2009
6 mars 2009 à 17:13
Certes l’avenir des compilateurs c’est cela au même titre que l’on peut utiliser un éditeur HTML ou PHP pour créer un site en ayant seulement quelques notions de programmation en PHP ou HTML.
Mais n’est ce pas la volonté de MICROSOFT de s’octroyer des monopoles !!!
Alors que faut-il faire ?
Passer par là ou MICROSOFT souhaite nous faire passer, c'est-à-dire sous prétexte de concevoir des utilitaire de plus en plus performants avec des interfaces de plus en plus ergonomique et a la porté de tous, il nous enlève toutes capacité de maitrise d’un langage et tous cela parce que nous même nous allons par la force des choses faire preuve de paresse intellectuelle.
Ou faut il s’émanciper et revenir à programmer en assembleur ?
La portabilité ? Oui mais comment peut on anticiper sur l’avenir.
Personnellement, je ne veux pas cracher dans la soupe, j’aime la politique de MICROSOFT car malgré cela Microsoft nous laisse le choix.
Taper 200 ou 300 lignes de code pour faire apparaitre une fenêtre sous XP ou autre ou cliquer sur projet win32 pour avoir à éviter ce laborieux travail ?
Oui le monde ne s’arrête pas ou s’arrête Windows !!!
agparchitecture Messages postés 88 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 7 novembre 2010
6 mars 2009 à 09:02
Pour répondre à yvesB73, j'ai commencer par développer avec la tecnologie dotnet en VB. (voir mon profil)

Cependant le but de mes programmes n'est pas de devenir un grand parmis les grands (l'informatique n'est pas mon boulot) mais simplement de developper des programmes qui peuvent me simplifier la vie et executer des taches répétitives dans mon travail d'architecte.

Si j'en suis venu à C et espère passer à C++ bientot, c'est plus par soucis de portabilité du code sous linux et éventuellement sous mac et également (à mon sense) une possibilité de comprendre un peu mieux ce que l'on fais. Je ne dits pas que c'est le cas avec C#, mais celui-ci nous propose presque des algorithmes tout fais. Bientot on programmera : Je veux un super programme qui fais cela et ceci et on l'aura ;-)
YvesB73 Messages postés 5 Date d'inscription mardi 20 janvier 2009 Statut Membre Dernière intervention 7 mars 2009
6 mars 2009 à 01:09
C’est effectivement la réponse que j’attendais en prêchant C#.
Avant de commencer à programmer il faut d’abord connaitre nos propres ambitions.
Devenir un grand parmi les grands ou seulement s’amuser à ce faire ses petits programmes sans prétention ou ambition.
Certes le monde ne s’arrête pas ou s’arrête Windows mais en ce qui me concerne j’étais très pressé de voir s’afficher quelque lignes dans une fenêtre et non dans une console.
Cela dis je suis très admiratif devant ce code source, il reflet un souci de perfection et non de réinventer la roue.
Contrairement a ce que l’on peut lire de partout, je crois qu’il faut comprendre le C pour passer a C# mais sans pour autant trop délirer.
Et pour finir sur un phrase philosophique, je dirais qu’il est difficile de ce connaitre soit même sans connaitre nos ancêtres et ceci est bien à propos quand on parle de l’héritage dans la programmation orientée objet
agparchitecture Messages postés 88 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 7 novembre 2010
5 mars 2009 à 08:25
Merci pour les commentaires

Effectivement réinventer la roue permet de bien comprendre le fonctionnement et me permet de bien reflechir à l'algorithme.

Cependant, pourquoi optimiser le code si on utilise la programation modulaire: une fois créer multiple utilisation dans les programmes.

De plus comment optimiser ce code? suppression des {} si une seule conditions?
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
5 mars 2009 à 06:40
Salut

fgets() est une fonction sécurisée que tu utilises parfaitement bien dans ton code. Le reste ne serait-il qu'un "habillage" autour de cette fonction ?

Pense à essayer de raccourcir si c'est le cas. Ton code est relativement propre mais manque peut être d'optimisation ;-) En tant que débutant j'imagine que tu souhaites faire parfaitement les choses ce que je comprend mais la je serais tenté de dire que c'est trop. Question que tu dois te poser : si demain tu as un petit projet qui nécessite une saisie utilisateur, sera tu prêt à insérer 212 lignes de codes dans ton source alors que celui n'aurait du en faire que 50 par exemple ?

Je ne dirais rien au fait de réinventer la roue, je ne l'ai fait que trop souvent et j'approuve ceux qui le font, je pense que c'est une bonne façon de comprendre le fonctionnement (sans perdre de vue l'utilisation des fonctions approuvées par la norme ANSI).

Bon courage pour la suite

++
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
2 mars 2009 à 13:41
Si tu te mets en standard C++ ça passe n'importe où en incluant
#include
using namespace std;

puis tu fais un :
cin.getline(Temp, sizeof(Temp));

Pour un débutant c'est pas trop mal seulement tu réinvente la roue alors qu'en utilisant les standards avec éventuellement des vérifs sur std::fail (en standard C++), ou une autre fonction du C par exemple, on peut faire les choses simplement.
Aorimn Messages postés 2 Date d'inscription lundi 5 janvier 2009 Statut Membre Dernière intervention 17 février 2009
17 févr. 2009 à 19:03
Agparchitecture, deux réponses :

1. Ce que renvoie getline, c'est la taille de ligne (pour reprendre mon exemple, ou la taille de *lineptr pour reprendre le manuel). Mais la chaine de caractères lue est stockée dans le char* nommé ligne (ou *lineptr...)
Autrement dit, pour afficher ce que tu as lu dans un fichier quelconque (même l'entrée standard (= le clavier)), tu fais : puts(ligne); ou printf(ligne); (puts() est plus optimisée il me semble...)
Avec un while, tu peux comme ça lire un fichier ligne par ligne, sans avoir peur de dépasser l'espace mémoire que tu aurais allouer avec un fgets().

2. La ligne #define _GNU_SOURCE ne me sert pas dans mon code, mais elle est nécessaire à la librairie stdio.h pour pouvoir utiliser la fonction getline().

Néanmoins, je ne suis pas sur que la macro fonctionne sous windows, et donc que la fonction getline() soit utilisable sous windows (auquel cas, ce programme peut servir ^^)
agparchitecture Messages postés 88 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 7 novembre 2010
17 févr. 2009 à 08:21
Aorimn deux questions:

1. getline ne renvois q'un entier. Qu'en est-il pour des caractères ou des décimal.

2. je ne comprend pas ta ligne: #define _GNU_SOURCE
Pourquoi definir quelque chose si elle n'est pas utilisée?
Aorimn Messages postés 2 Date d'inscription lundi 5 janvier 2009 Statut Membre Dernière intervention 17 février 2009
16 févr. 2009 à 22:23
Une fonction bien pratique qui te permettrait de pas faire tout ça (même si globalement, ça m'a l'air pas mal), c'est la fonction getline().

Prototype (et includes) :
#define _GNU_SOURCE
#include <stdio.h>

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

Exemple d'utilisation :
ssize_t entier_retourne = 0;
char* ligne = NULL;
size_t buffer = 0;

entier_retourne = getline(&ligne, &buffer, stdin);

entier_retourne contient la longueur de la chaine de caractères ligne qui, elle, contient la saisie de l'utilisateur. buffer n'apporte pas grand chose (du moins, j'en ai jamais trouvé l'utilité...) et stdin est le fichier dans lequel getline va lire (stdin est l'entrée clavier, et aussi un fichier, pas besoin de le définir plus tôt).

En espérant que ça t'aide pour tes futurs programmes...

p.s : la macro _GNU_SOURCE fonctionne sous windows ?
CharSnipeur Messages postés 3 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 février 2009
16 févr. 2009 à 21:51
C#, .NET ... tous ça c'est du propriétaire MS !
Donc, pas portable, ni forcément maintenue longtemps (VB).
D'où l'intérêt d'apprendre le C. Le monde ne s'arrête pas là où s'arrête windows !
YvesB73 Messages postés 5 Date d'inscription mardi 20 janvier 2009 Statut Membre Dernière intervention 7 mars 2009
16 févr. 2009 à 21:09
Je suis vraiment débutant et j’aimerais savoir quel peut être l’intérêt de programmer en C alors que l’avenir serait plutôt C#
Je suis passé de C a C++ et maintenant je commence a écrire en code managé avec VS.NET c’est un plaisir mais je regrette de ne pas être passé directement par C#
Rejoignez-nous