saisie clavier mais prob de \\

saisie clavier mais prob de \\ - C - Programmation

Marsh Posté le 06-01-2007 à 01:52:28    

bonsoir :hello:  
 
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.
 

Code :
  1. cout<<"indiquer chemin du fichier: ";
  2.   while((c=getchar())!= '\n')
  3.   {
  4.      Buffer[j++]=c;
  5.   }
  6.   Buffer[j++]='\0';


 
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?

Reply

Marsh Posté le 06-01-2007 à 01:52:28   

Reply

Marsh Posté le 06-01-2007 à 02:02:52    

je rêve ou tu mix C et C++ ?
 

Code :
  1. cin >> Buffer;

Reply

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.

Message cité 1 fois
Message édité par turntablx le 06-01-2007 à 02:14:13
Reply

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 '\\'


Message édité par IrmatDen le 06-01-2007 à 02:16:24
Reply

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 ...).
mais je vois pas comment empecher le double antislash que je recupere alors que j'en tape qu'1.


 :sweat:

 

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 :P) hein... Je vois pas trop le but de la manoeuvre là


Message édité par zapan666 le 06-01-2007 à 02:19:41

---------------
my flick r - Just Tab it !
Reply

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!

Reply

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? [:autobot]

Reply

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 :D  a force de mélanger je fais plus gaffe au langage


Message édité par turntablx le 06-01-2007 à 02:31:20
Reply

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 :) .
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!


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à :/)

Reply

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 :
  1. int main(int argc, char *argv[])
  2. {
  3.    char Buffer[TAILLE_MAX]="";char c;
  4.    int caractereActuel = 0; int compt=0;int j=0;
  5.    FILE* fichier = NULL;
  6. cout<<"indiquer chemin du fichier: ";
  7.    while((c=getchar())!= '\n')
  8.    {
  9.      Buffer[j++]=c;
  10.    }
  11.    Buffer[j++]='\0';
  12.  
  13.  
  14.    fichier = fopen( "Buffer", "r" );
  15.  
  16.        if (fichier != NULL)
  17.     {
  18.        
  19.         // jusqu'a eof
  20.         do
  21.         {
  22.               // jusqu'au retour chariot  
  23.             do
  24.             {
  25.              caractereActuel = fgetc(fichier);
  26.              Buffer[j]= fgetc(fichier);
  27.              compt=compt+1;j++;
  28.             } while(caractereActuel!='\n');
  29.            
  30.         } while (caractereActuel != EOF);
  31.         fclose(fichier);
  32.         for(int i=0;i<compt;i++){cout<<Buffer[i];}
  33.     }
  34.     else{cout<<"impossible d'ouvrir le fichier\n";}


 
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


Message édité par turntablx le 06-01-2007 à 02:50:37
Reply

Marsh Posté le 06-01-2007 à 02:39:35   

Reply

Marsh Posté le 06-01-2007 à 02:44:19    

Code :
  1. fopen(Buffer, "r" );

non ? (ligne 15)
 
et oui, faut mieux remplacer cout par autre chose (printf, puts...)

Reply

Marsh Posté le 06-01-2007 à 13:07:41    

quel c'est ridicule ...
 
et fgets ...

Reply

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.

Reply

Marsh Posté le 07-01-2007 à 11:10:18    

t'es déjà perdu à mélanger C et C++ qui sont deux langages distincts.

Reply

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.

Message cité 2 fois
Message édité par turntablx le 08-01-2007 à 21:32:51
Reply

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.
dites moi si je me plante.

 

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.


Message édité par Elmoricq le 09-01-2007 à 09:28:15
Reply

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 :


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.


 [:arrakys]
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

 


Message cité 2 fois
Message édité par Emmanuel Delahaye le 09-01-2007 à 20:49:51

---------------
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 09-01-2007 à 13:26:15    

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.


 

Code :
  1. class Bidule {
  2. private:
  3. Machin truc;
  4. public:
  5. Bidule() : strcpy(truc, "" ) {}
  6. };


(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 ? [:petrus75]


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 09-01-2007 à 13:49:27    

zapan666 a écrit :

Code :
  1. class Bidule {
  2. private:
  3. Machin truc;
  4. public:
  5. Bidule() : strcpy(truc, "" ) {}
  6. };


(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 ? [:petrus75]


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.  


---------------
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 09-01-2007 à 14:38:05    

ok c'est quand même plus sympa quand les choses sont dites comme ca. je prends note  ;)

Reply

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.

Reply

Marsh Posté le 09-01-2007 à 20:03:57    

Justement : le résultat n'est pas prévisible par les normes C. ;)

Reply

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 :


Le comportement du programme *C++* en résultant, est défini si le programme C en question est aussi un programme C++ valide.

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 ?


---------------
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 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.

Reply

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.


---------------
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 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.

Reply

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.

Message cité 1 fois
Message édité par Emmanuel Delahaye le 10-01-2007 à 09:44:44

---------------
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 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.


Message édité par ++fab le 10-01-2007 à 22:27:57
Reply

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.

Reply

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...[:million dollar baby]


Message édité par Sve@r le 13-01-2007 à 22:03:10

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

Marsh Posté le 12-01-2007 à 01:04:01    

Et cette incompatibilité présente un danger selon toi ?

Reply

Marsh 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 :
  1. #ifdef __cplusplus
  2. #error This source file is not C++ but rather C. Please use a C-compiler
  3. #endif


Ben oui, faut pas déconner non plus. C c'est pas C++.


---------------
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 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
commencent par :

Code :
  1. #ifdef __cplusplus
  2. #error This source file is not C++ but rather C. Please use a C-compiler
  3. #endif




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.

 


Message édité par ++fab le 13-01-2007 à 23:03:14
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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