Ecrire dans un fichier texte avec espaces

zeprex Messages postés 6 Date d'inscription jeudi 25 mai 2006 Statut Membre Dernière intervention 27 novembre 2008 - 20 nov. 2008 à 11:53
zeprex Messages postés 6 Date d'inscription jeudi 25 mai 2006 Statut Membre Dernière intervention 27 novembre 2008 - 27 nov. 2008 à 11:11
Hello, donc voila j'aimerais écrire dans un fichier texte, mais il ne prends pas mes espaces :(

Le Code :

#include <stdio.h>
#include <string.h>

void main()
{
  FILE *F;
  char contenu[100] ;
  char NOM[30];
  int menu;

  printf("Menu \n\n");
  printf("1. cree un fichier\n");
  printf("2. generer un fichier batch");
  scanf("%d",&menu);
  printf("\n");
 
  switch (menu)
  {
      case 1:
       printf("Entrez le nom du ficher avec l'extension ( exemple: monfichier.txt)\n ");
  scanf("%s", NOM);
  F = fopen(NOM, "w"); 

  printf("Entrez le contenu du fichier ");
  scanf ("%s", contenu);
  fwrite(contenu,sizeof(contenu),1,F);

     
    
  fclose(F);
       break;
      case 2:

  F = fopen("batch.bat", "w"); 

  fprintf(F, "ipconfig /all > ips.txt");
     
    
  fclose(F);
}}

 NE TENEZ PAS COMPTE DU BATCH ÇA ÇA MARCHE.

Donc comme ca les espaces sont devenus des caractères spéciaux dans le fichier.txt de destination, et si j'utilise fprintf il ne m'écrit que le 1er mot.

Quelqu'un pour m'aider? merci

12 réponses

nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
25 nov. 2008 à 17:28
Salut;


en c++ :


char contenu[1025];


cin.getline(contenu,1024+1);  // s'arrete apres avoir pris les 1024 premiers caracters ou a l'appui de la touche Enter ou '\n';

en c:
cin.getline <====> gets(contenu)
le seul ennui , il y a risque de depassement de la limite du tableau de caracteres (bufferoverflow).

bonne continuation.

http://liveplayaz.com

je suis heureux de faire partie d'une grande famille ...!

/B&
1
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
21 nov. 2008 à 13:17
Et en changeant ton fwrite(contenu,sizeof(contenu),1,F); par fputs(contenu,F); ?

Cordialement, uaip.
0
zeprex Messages postés 6 Date d'inscription jeudi 25 mai 2006 Statut Membre Dernière intervention 27 novembre 2008
21 nov. 2008 à 17:04
même problème, un seul mot :/
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
21 nov. 2008 à 17:09
Ah mais oui, suis-je bête.
Ton scanf ("%s", contenu); ne récupère que le 1er mot saisi. Le masque %s ne calque qu'un seul mot (il s'arrête au premier espace).
Il va donc falloir trouver un autre moyen pour récupérer tout le texte... (perso, je n'ai pas d'idée )

Cordialement, uaip.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Adeon Messages postés 293 Date d'inscription jeudi 21 août 2003 Statut Membre Dernière intervention 10 avril 2015 2
22 nov. 2008 à 09:12
je savais pas que scanf s'arretait au premier mot.
Tu peux ptete essayer du coté de cin >> variableTexte;
______________________
Adeon, programmeur de jeux sur directX 9 (http://theolith.com) a votre service !
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
22 nov. 2008 à 12:39
Idem, je pensais que les espaces étaient comptés dans un %s.
Mais mes tests m'avaient montré que non. Une fois j'ai voulu récupérer une chaine de mots entre guillemets, et sscanf(chaine,"blabla "%s" blabla",&chaine2); ne marchait pas correctement non plus.

Et s'il veut utiliser l'opérateur cin, il va falloir qu'il intègre le C++ car je ne vois que du C dans son code.

Cordialement, uaip.
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
22 nov. 2008 à 14:31
Slt à tous,
Il me semble qu'il existe une syntaxe du type :
scanf("%[^\n]",...);//On peut modifier '\n' par n'importe quel caractère
Qui te prends le texte jusqu'au premier retour à la ligne, ou aussi :
fflush(stdin);
gets(chaine);

@++ Bastien

//Vive Ubuntu !!!
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
22 nov. 2008 à 15:39
Yeps.
Au passage BastienL21, tu n'aurais pas un bon lien sous la main expliquant les masques de ce style ? (bien que ce que tu viens de marquer ressemble fort à une regexp).
J'ai déjà trouvé plusieurs exemples, mais pas un lien expliquant brièvement l'utilisation des masques.

Cordialement, uaip.
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
22 nov. 2008 à 15:44
Non, désolé, j'ai retrouvé cette technique dans un coin de ma tête mais c'est tout, je ne connais pas de bons liens, désolé.

@++, B@stien

//si vous avez 15 secondes,(chargements compris!), répondez à ce sondage SVP :
http://pixule.com/sondage/59755078573_Sous-quel-OS-tournestu-.html
0
zeprex Messages postés 6 Date d'inscription jeudi 25 mai 2006 Statut Membre Dernière intervention 27 novembre 2008
22 nov. 2008 à 15:50
j'ai essayé avec gets même soucis :/
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
22 nov. 2008 à 16:10
Re bonjour,
Tu es sûr que ce n'est pas au moment où tu récupère ce qu'il y a dans le fichier que tu ne prends que le premier mot?
Tu peux le vérifier en allant ouvrir manuellemnt le fichier texte avec le bloc-note ou autre éditeur de texte, parsque chez moi, sa marche impec...

@++, B@stien
0
zeprex Messages postés 6 Date d'inscription jeudi 25 mai 2006 Statut Membre Dernière intervention 27 novembre 2008
27 nov. 2008 à 11:11
#include <stdio.h>
#include <string.h>

void main()
{
  FILE *F;
  char contenu[100] ;
  char NOM[30];
  int menu;

  printf("Menu \n\n");
  printf("1. cree un fichier\n");
  printf("2. generer un fichier batch");
  scanf("%d",&menu);
  printf("\n");
 
  switch (menu)
  {
      case 1:
       printf("Entrez le nom du ficher avec l'extension ( exemple: monfichier.txt)\n ");
  scanf("%s", NOM);
  F = fopen(NOM, "w");

  printf("Entrez le contenu du fichier ");
  gets (contenu);
  fwrite(contenu,sizeof(contenu),1,F);

     
    
  fclose(F);
       break;
      case 2:

  F = fopen("batch.bat", "w");

  fprintf(F, "ipconfig /all > ips.txt");
     
    
  fclose(F);
}}

chez moi ca ne marche pas, vous avez bien compris ce que je voulais ? je veux que lorsqu'il me demande le contenu si je tappe "salut ca va" il ne m'affiche pas que le "Salut"

Merci de votre aide en tt cas.
0
Rejoignez-nous