Partage
  • Partager sur Facebook
  • Partager sur Twitter

l'écture écriture

Sujet résolu
Anonyme
3 juin 2007 à 21:42:03

Bonjour,
Je ne sais pas trop comment l'expliquer mais quand je fait des écriture dans un fichier.
Et au champ Adresse je marque :
4 rue (nom de la rue) (la ville)
les deux autre champ sont sauter. pourquoi ?

Champ : espace d'écriture

Voila le code source :


>#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
    ofstream fichier;
    fichier.open("carnet.txt", ios::out|ios::trunc);
    if(fichier)
    {
    int age = 0;
    char pseudo[50];
    char prenom[20];
    char quit[7];
    char adresse[50];
    char mobile[40];
    cout << "Quel age avez-vous ?" << endl;
    cin >> age;
    cout << "Quel est votre nom : " << endl;
    cin >> pseudo;
    cout << "Quel est votre prenom : " << endl;
    cin >> prenom;
    cout << "Quel est votre adresse : " << endl;
    cin >> adresse;
    cout << "Quel est votre numero de telephone : " << endl;
    cin >> mobile;
    cout << " " << endl;
    cout << "Votre age : " << age << endl;
    cout << "Votre nom : " << pseudo << endl;
    cout << "Votre prenom : " << prenom << endl;
    cout << "Votre adresse : " << adresse << endl;
    cout << "Votre numero de telephone : " << mobile << endl;
    cout << " " << endl;
    fichier << "Votre age : " << age << endl;
    fichier << "Votre nom : " << pseudo << endl;
    fichier << "Votre prénom : " << prenom << endl;
    fichier << "Votre adresse : " << adresse << endl;
    fichier << "Votre numero de telephone : " << mobile << endl;
    cout << "pour quitter taper une lettre et appuyer su entree." << endl;
    cin >> quit;
}
else
{
    cout << "Impossible d'ouvrir le fichier !" << endl;
    return 1; //l'ouverture à échoué, on quitte...
}

fichier.close();

return 0;
}


Merci de m'aider.
  • Partager sur Facebook
  • Partager sur Twitter
3 juin 2007 à 22:24:25

Salut.

Citation : Pas de titre

Je ne sais pas trop comment l'expliquer


Essaye avec des balises codes. ;)
(CF les règles du forum... Qui je m'en aperçois n'ont pas été mises en post it sur ce forum précisément...
Bref, lit ça : http://www.siteduzero.com/forum-83-6661-p1-regles-de-ce-forum.html)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
4 juin 2007 à 12:41:54

voila ses modifier ! :)

Mais quelqu'un sais ses quoi mon problème ?
  • Partager sur Facebook
  • Partager sur Twitter
4 juin 2007 à 12:58:37

Tu met la ligne fermant ton fichier tout à la fin.
Ce qui a pour effet que même si l'ouverture a échoué tu va quand même (essayer de) le fermer.

char pseudo[50];
char prenom[20];
char quit[7];
char adresse[50];
char mobile[40];

Pourquoi des tableaux de char dans un code C++ ?

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
4 juin 2007 à 18:18:19

Donc il faut que je déplace la ligne pour fermer le fichier vers le haut,

char ses pour écrire les donnés dans la mémoire qui pour la suite pas être écrit dans le fichier carnet.

Et des que je ferai des espaces je ne vais pas sauter des espace de texte ou des (champs) ?
  • Partager sur Facebook
  • Partager sur Twitter
4 juin 2007 à 18:24:47

Citation : Pas de titre

Donc il faut que je déplace la ligne pour fermer le fichier vers le haut,


Il faut que tu le mette à la fin du bloc où tu es sur d'avoir ouvert le fichier.

Citation : Pas de titre

char ses pour écrire les donnés dans la mémoire qui pour la suite pas être écrit dans le fichier carnet.


Certes mais pourquoi ne pas utiliser de string ?

Citation : Pas de titre

Et des que je ferai des espaces je ne vais pas sauter des espace de texte ou des (champs) ?


Peut être. Je ne sais pas...
  • Partager sur Facebook
  • Partager sur Twitter
4 juin 2007 à 18:27:41

J'ai testé ton code et il marche ;) !

<pointilleux>
Par contre, tu as oublié un "r" dans "appuyez su entree"
</pointilleux>
  • Partager sur Facebook
  • Partager sur Twitter
4 juin 2007 à 18:33:43

Je ne connais pas le c++, mais je pense que le probleme doit etre le meme qu'en C.

En fait, dès que tu rentres un espace lors d'un envoi basique (comme un scanf("%s",adresse) en C, et surement comme un cin en C++), le moindre caractère "blanc" (espace, tabulation, retour chariot...) agira comme une limite dans la saisie.

Donc si tu tapes "4 rue des oliviers", seul le 4 sera récupéré dans la variable d'adresse.


Pour remédier à cela, et si tu connais un peu les bases du C, je te renverrai à ce sujet que j'avais créé dans le temps :
http://www.siteduzero.com/forum-83-122610-p1-echappement-d-un-scanf.html

Il expliquait les techniques d'échappement du scanf, il doit y avoir un moyen de les transposer en c++ facilement.

Dans ton cas, pour récupérer l'adresse complete, il ne faudrait pas faire (en C) :

scanf("%s", adresse);


Mais :

scanf("%[^\n]", adresse), getchar();


(le getchar() final n'est là que pour faire sauter le '\n' restant dans le flux d'entrée, tout le reste étant déjà parti dans le %[^\n])
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
4 juin 2007 à 19:04:15

Merci,

De vos aident je vais voir sa.

Si je n'utilise pas string ses parce que j'en suis pas encore a se chapitre :lol:

J'ai oublié le "r" dans la phrase: appuyer sur entrée
(ses réparer sur mon code source)

Je le ferais parvenir sur le forum même si il y en a des plus puissant ; ses drôle ^^
  • Partager sur Facebook
  • Partager sur Twitter
4 juin 2007 à 19:06:29

Obli, c'est le forum C++... il serait apprécié de ne donner que de l'aide dans ce langage.

les scanf sont déprécié car les cin apporte des améliorations incontournables en C++.
  • Partager sur Facebook
  • Partager sur Twitter
5 juin 2007 à 0:04:33

Citation : Carthage

Si je n'utilise pas string ses parce que j'en suis pas encore a se chapitre :lol:


Et à la place on vous montre les fichiers avant les chaines standard, et pire que tout comment se tirer une balle dans le pied ?
char b[1]; // 1 ou 100000, même combat !
std::cin >> b;

Super !

Sinon, Obli, tu as vu parfaitement juste. L'opérateur d'extraction >> découpe au niveau des espaces.

std::getline() est la solution au problème soulevé.

PS: s/ses/c'est/ ; s/se/ce/
Relis-toi STP.
PPS: certes, la réponse d'Obli n'est pas en thême avec le forum, mais elle est en plein dans le mille.
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
Anonyme
5 juin 2007 à 16:39:57

Heu j'ai pas compri ???

std::cin
et
std::getline()

Ils faut que je les placent où ?

Dès qu'il y a cout sa ne marche pas ! ????

essais de faire sa sur mon fichier ? Voir si toi sa marche ?
  • Partager sur Facebook
  • Partager sur Twitter
5 juin 2007 à 22:57:42

Arf. Des fois il y a vraiment tout dans la FAQ.
http://c.developpez.com/faq/cpp/?page=SL#SL_get_string_line
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
Anonyme
6 juin 2007 à 18:57:10

Merci.

Mon problème est résolue :D
Grace à vous. J'ai chercher cette exprésion sur le site "la faq" maintenant je sais que ses sur devloppez.com :p
  • Partager sur Facebook
  • Partager sur Twitter