saisie clavier mais prob de \\ - C - Programmation
Marsh Posté le 06-01-2007 à 02:10:21
heu ouai c vrai que j'utilisela syntaxe c++ le plus possible mais je reste C dans ma construction. Donc oui j'ai pas posté au bon endroit peu etre
Pour le cin et bien non je veux pas m'en servir. mon but c'est de recuperer caractere par caractere le chemin(url) du fichier (pour ensuite aller le lire ...).
mais je vois pas comment empecher le double antislash que je recupere alors que j'en tape qu'1.
Marsh Posté le 06-01-2007 à 02:15:57
Tu peux pas, c'est un caractère d'échappement. T'as tapé '\n' dans ta condition, tu devrais percuter pourquoi pour avoir un '\' "réél", la chaîne doit donc contenir '\\'
Marsh Posté le 06-01-2007 à 02:18:49
turntablx a écrit : heu ouai c vrai que j'utilisela syntaxe c++ le plus possible mais je reste C dans ma construction. Donc oui j'ai pas posté au bon endroit peu etre Pour le cin et bien non je veux pas m'en servir. mon but c'est de recuperer caractere par caractere le chemin(url) du fichier (pour ensuite aller le lire ...). |
Tu peux récupérer caractère par caractère via cin si tu veux aussi, (normalement...mais faut pas me demander comment on fait ) hein... Je vois pas trop le but de la manoeuvre là
Marsh Posté le 06-01-2007 à 02:25:03
sisi j'avais percuté la dessus mais je suis pas sur de comprendre vraiment ce que tu me conseils. il faudrait que je tape 2 fois \\ quand je rentre ma chaine de caractere? jimagine que c'est pas ca que tu veux me dire .
là j'ai une idée qui me viens vagument je vais essayer de l'appliquée.
je debute un peu la prog, j'avais commencé ya qq temps mais j'avais laché, découragé. mais la je crois que je vais m'y mettre au taquet!
Marsh Posté le 06-01-2007 à 02:26:18
C'est cin.get() pour récupérer caractère par caractère.
Mais, vu qu'il est en cat C et qu'il fait moit/moit, pourquoi tu lui dis pas de remplacer cout par un puts ou équivalent?
Marsh Posté le 06-01-2007 à 02:29:28
Citation : hein... Je vois pas trop le but de la manoeuvre là |
je fais un getchar() pour saisir uniquement les caracteres nécessaires, je sais pas faire d'allocation encore
ok pour le cin.get() je vais voir avec ca alors merci
re: mon fichier est en .cpp a force de mélanger je fais plus gaffe au langage
Marsh Posté le 06-01-2007 à 02:30:04
turntablx a écrit : sisi j'avais percuté la dessus mais je suis pas sur de comprendre vraiment ce que tu me conseils. il faudrait que je tape 2 fois \\ quand je rentre ma chaine de caractere? jimagine que c'est pas ca que tu veux me dire . |
Ben, les '\' qui rentre dans un programme (c-a-d autre que ceux que tu mets dans le code) sont automatiquement échappés, ce qui fait que tu peux voir un double '\' en debuggant admettons. Mais lorsque tu demandes à ouvrir le fichier à cet emplacement, il ne sera pris en compte que comme un simple '\' puisqu'en fait c'est un seul caractère... (je sais pas si je suis trés clair là )
Marsh Posté le 06-01-2007 à 02:39:35
ok je crois que je te suis IrmatDen. c'est bien en debuggant que j'appercois le double \\. mais la suite de mon prog pour l'instant c'est ca :
Code :
|
bon mon code est confu et pas bien commenté peu etre, mais je verrai ca demain là je suis plus bon à rien, j'ai les snoeil eclatés. je vois ca demain ca vaut mieux
j'ai m^me pas fini ce que je voulais dire: fichier = fopen( "Buffer", "r" ); retroune null alors que mon fichier contient quelque chose. donc c'est bien un probleme d'antislash qui fausse l'adresse.
sinon mon prog sert a rien pour l'instant mon but serra de recup les caracteres du fichier puis de les stockers dans le buffer pour ensuite crypter ces caracteres et les ajouter enfin dans les fichiers. je savais pas quoi faire comme prog, j'ai eu ma dose de calcul et de tri
je vais utiliser puts alors mais c'est juste que je veux m'habituer a la syntaxe c++. J'ai luu des choses pas terrible sur le printf, donc je le zap
Marsh Posté le 06-01-2007 à 02:44:19
Code :
|
non ? (ligne 15)
et oui, faut mieux remplacer cout par autre chose (printf, puts...)
Marsh Posté le 06-01-2007 à 13:23:14
faut bien si mettre mon petit Taz, si je loupe le coche sur les bases je progresserai lentement par la suite...je me passerai de ton avis si c'est pour te foutre de moi .
merci quand même pour le fgets je connaissais pas je crois.
Marsh Posté le 07-01-2007 à 11:10:18
t'es déjà perdu à mélanger C et C++ qui sont deux langages distincts.
Marsh Posté le 08-01-2007 à 21:31:33
mais arrête de dire des conneries mon petit Taz, c'est pas l'utilation du cout au lieu du printf et du cin au lieu du scanf qui vont me mettre dans le flou.
J'ai encore du mal à cerner la notion d'objet (ici c++) donc je me contente de la struture du c. une fois que j'aurais compris je passerai au c++.
et puis quand tu dis que c et c++ sont 2 langages distincts je suis pas d'accord à 100%. Insérer du c quand tu fais du c++ ca pose pas plus de problème que ca je crois, l'inverse n'est pas vrai par contre.
dites moi si je me plante.
Marsh Posté le 09-01-2007 à 09:27:05
turntablx a écrit : mais arrête de dire des conneries mon petit Taz, c'est pas l'utilation du cout au lieu du printf et du cin au lieu du scanf qui vont me mettre dans le flou. |
Si. La preuve pas plus tard que la phrase suivante :
turntablx a écrit : J'ai encore du mal à cerner la notion d'objet (ici c++) donc je me contente de la struture du c. |
turntablx a écrit : et puis quand tu dis que c et c++ sont 2 langages distincts je suis pas d'accord à 100%. Insérer du c quand tu fais du c++ ca pose pas plus de problème que ca je crois, l'inverse n'est pas vrai par contre. |
Tu te plantes. Très simple de créer un programme C qui ne compile pas en C++, et vice-versa. Ce sont deux langages distincts, avec deux philosophies distinctes, et deux bibliothèques de base distinctes (libC pour le C, STL pour le C++).
La grammaire et commune, et le fait que le C++ ait accès à la libC de manière quasi transparente. Ce qui perd le plus les débutants, c'est qu'on peut écrire du simili-C en C++, ce qui est pourri, illisible, le plus souvent bugué, et souvent synonyme de programme à jeter à la poubelle.
Bref, utiliser la libC en C++ ça peut dépanner j'imagine, mais il vaut mieux regarder avant dans la STL ou dans les bibliothèques communes s'il n'y a pas l'équivalent en C++, c'est bien mieux.
Marsh Posté le 09-01-2007 à 13:19:56
turntablx a écrit : et puis quand tu dis que c et c++ sont 2 langages distincts je suis pas d'accord à 100%. |
C'est pas une question d'être d'accord ou non. C'est un fait, pas une opinion. Il y a 2 documents ISO distincts qui définissent ces langages (C++98 / C05). Le seul sous-ensemble commun garanti par la définition de ces deux langages est la bibliothèque standard du C. C'est tout.
Citation :
|
Qu'appelles-tu 'insérer' ?
On sait réaliser des projet avec des fichiers sources différents (C, C++, asm), oui (chaque fichier sera compilé avec le compilateur qui va bien). Une fonction écrite en C est capable d'appeler une fonction écrire en C++, oui. Mais 'insérer', je ne vois pas...
Si tu as l'intention de compiler du C avec un compilateur C++, tu commets une grave erreur. Le comportement est indéfini. Point.
http://david.tribble.com/text/cdiffs.htm
Marsh Posté le 09-01-2007 à 13:26:15
Emmanuel Delahaye a écrit : |
Code :
|
(avec Machin un typedef sur char* bien sûr)
J'ai vu ça sur un projet d'élève il y a 5min.
L'avis des élèves qui reprennent ce code :
"mais c'est dla merde"
Je dois en plus les prévenirs que le programme bien qu'il "compile" risque de leur claquer un comportemant pas prévisible ?
Marsh Posté le 09-01-2007 à 13:49:27
zapan666 a écrit :
|
Comme je l'ai indiqué, on a le droit d'utiliser en C++ des appels de fonctions C, y compris de la bibliothèque standard du C. Le problème n'est pas là.
Ce qu'il ne faut pas faire, c'est prendre un code écrit en C, réputé conforme au langage C et se dire, je vais le compiler en C++ et ça va marcher. Ben non.
Au mieux, ça ne compile pas, au pire, ça compile et le comportement est indéfini.
Marsh Posté le 09-01-2007 à 14:38:05
ok c'est quand même plus sympa quand les choses sont dites comme ca. je prends note
Marsh Posté le 09-01-2007 à 19:51:14
Emmanuel Delahaye a écrit : C'est pas une question d'être d'accord ou non. C'est un fait, pas une opinion. Il y a 2 documents ISO distincts qui définissent ces langages (C++98 / C05). Le seul sous-ensemble commun garanti par la définition de ces deux langages est le préprocesseur. C'est tout. |
Non, d'où tu sors ça ? C99 a étendu le préprocesseur. C++98 lui est antérieur (!) et ne l'a pas - la révision de 03 n'y a rien changé. Le seul sous-ensemble commun que je connaisse, c'est la bibliothèque C. Après il y a peut-être deux ou trois choses par ci par là ...
Emmanuel Delahaye a écrit : Si tu as l'intention de compiler du C avec un compilateur C++, tu commets une grave erreur. Le comportement est indéfini. Point. |
Tout dépend comment tu définis "indéfini"
Le comportement du programme *C++* en résultant, est défini si le programme C en question est aussi un programme C++ valide. Je ne suis pas en train de dire qu'ils donneront le même résultat.
Marsh Posté le 09-01-2007 à 20:03:57
Justement : le résultat n'est pas prévisible par les normes C.
Marsh Posté le 09-01-2007 à 20:49:02
++fab a écrit : Non, d'où tu sors ça ? C99 a étendu le préprocesseur. C++98 lui est antérieur (!) et ne l'a pas - la révision de 03 n'y a rien changé. Le seul sous-ensemble commun que je connaisse, c'est la bibliothèque C. Après il y a peut-être deux ou trois choses par ci par là ... |
Exact, c'est le préprocesseur du C90 qui est le même que celui de C++98.
Je corrige.
Citation : |
Oui, mais quand on écrit du C, on est pas censé connaitre les règles du C++. pour être sûr, il faut être expert dans les 2 langages. Ce n'est pas donné à tout le monde...
En plus quel est l'intérêt ?
Marsh Posté le 09-01-2007 à 23:50:06
Emmanuel Delahaye a écrit : Oui, mais quand on écrit du C, on est pas censé connaitre les règles du C++. pour être sûr, il faut être expert dans les 2 langages. Ce n'est pas donné à tout le monde... |
Oui, mais qui parle d'être expert ?
Emmanuel Delahaye a écrit : En plus quel est l'intérêt ? |
Demander un contrôle des types plus poussé, exploiter la surcharge. C'est ce qui me vient en tête en premier.
Marsh Posté le 10-01-2007 à 00:44:57
++fab a écrit : Demander un contrôle des types plus poussé, exploiter la surcharge. C'est ce qui me vient en tête en premier. |
Dans ce cas, écrit en C++. Point. Laisse tomber le C, c'est pas grave.
Marsh Posté le 10-01-2007 à 01:22:27
Emmanuel Delahaye a écrit : Dans ce cas, écrit en C++. Point. Laisse tomber le C, c'est pas grave. |
(Ce n'était absolument pas mon point, j'essayais de répondre à ta question qui n'en était sans doute pas une, d'ailleurs)
Mon cas personnel - puisque tu as l'air de l'évoquer - est lié au contexte de mon employeur. Arrêtes un peu avec ta rengaine.
Et ce n'est peut-être pas ton expérience, mais des équipes compilent leurs logiciels avec un compilateur C, et de temps en temps avec un compilateur C++. Ils y voient des avantages. Une compilation rapide en C, une compilation C++ plus stricte et qui pousse à un meilleur style selon eux.
Marsh Posté le 10-01-2007 à 09:30:51
++fab a écrit : Et ce n'est peut-être pas ton expérience, mais des équipes compilent leurs logiciels avec un compilateur C, et de temps en temps avec un compilateur C++. Ils y voient des avantages. Une compilation rapide en C, une compilation C++ plus stricte et qui pousse à un meilleur style selon eux. |
Oui c'était à la mode pendant un temps suite à l'article 'http://www-sens.sys.es.osaka-u.ac. [...] ter_c.html', mais c'est risqué, car ce sont 2 langages différents :
http://david.tribble.com/text/cdiffs.htm
Cette manip est réservée aux experts des deux langages que nous ne sommes pas.
Marsh Posté le 10-01-2007 à 22:27:31
Emmanuel Delahaye a écrit : Oui c'était à la mode pendant un temps suite à l'article 'http://www-sens.sys.es.osaka-u.ac. [...] ter_c.html', mais c'est risqué, car ce sont |
Je ne sais pas si c'est le bon article. ça explique plutôt ce qu'il y a de bon à prendre en C++. Je parlais des quelques avantages qu'il y avait à utiliser un *compilateur* C++ pour compiler du C.
Emmanuel Delahaye a écrit : Cette manip est réservée aux experts des deux langages que nous ne sommes pas. |
Je ne suis pas expert, mais tu m'excusera de m'en sentir capable.
Marsh Posté le 10-01-2007 à 22:30:29
++fab a écrit : Non, d'où tu sors ça ? C99 a étendu le préprocesseur. C++98 lui est antérieur (!) et ne l'a pas - la révision de 03 n'y a rien changé. Le seul sous-ensemble commun que je connaisse, c'est la bibliothèque C. Après il y a peut-être deux ou trois choses par ci par là ... |
Je m'autoflagelle pour cette imprécision. C++98 inclu uniquement la bibliothèque *C90* par référence.
Marsh Posté le 11-01-2007 à 19:48:37
++fab a écrit : ...mais des équipes compilent leurs logiciels avec un compilateur C, et de temps en temps avec un compilateur C++. Ils y voient des avantages. Une compilation rapide en C, une compilation C++ plus stricte et qui pousse à un meilleur style selon eux. |
Ca va leur faire tout drôle à tes équipes le jour où ils déclareront un "int new" dans une fonction C et qu'ils iront le compiler avec un compilo C++ pour affûter leur style...
Marsh Posté le 12-01-2007 à 01:04:01
ReplyMarsh Posté le 12-01-2007 à 01:19:04
++fab a écrit : Et cette incompatibilité présente un danger selon toi ? |
Non, car ça ne va pas compiler... Chez moi, c'est encore plus radical. Tous mes sources C
http://mapage.noos.fr/emdel/clib.htm
commencent par :
Code :
|
Ben oui, faut pas déconner non plus. C c'est pas C++.
Marsh Posté le 13-01-2007 à 12:54:02
Emmanuel Delahaye a écrit : Non, car ça ne va pas compiler... Chez moi, c'est encore plus radical. Tous mes sources C
|
Ce qui est toujours mieux qu'une erreur de compilation sur les conversions void* -> T*...
Sinon - ce n'est pas encore d'actualité - mais pour ce qui est des avantages à compiler du C avec un compilateur C++, on peut prévoir que les variadic templates seront finalisées dans C++0X, et permettront une implémentation type-safe des fonctions variadic de la bibliothèque C.
Marsh Posté le 06-01-2007 à 01:52:28
bonsoir
bon le problème est surement super connue, mais je le relance quand même parceque j'ai pas trouver ce que je voulais, dans mes recherches sur le forum.
seulement quand j'entre un chemin absolu du style "c:\ok.txt" je me retrouve avec Buffer contenant ceci "c:\\ok.txt"
donc ma question est la suivante, comment saisir qu'1 antislash?