Lecture / écriture dans un fichier

  • scaramanga
  • Born
  • Born
  • No Avatar
  • Inscription: Avr 06, 2011
  • Messages: 4
  • Status: Offline

Message Avril 6th, 2011, 12:02 pm

Salut,

J'ai trouvé ce forum très utile dans mes études de langage C -. Je vous remercie pour cela.
Eh bien maintenant, j'ai un problème de ma propre.
Je vous écris un programme qui peut traiter un grand nombre qui peut être de 300 caractères.
Le programme est supposé lire le premier numéro du fichier, puis ajouter le numéro de seconde pour les entrées utilisateur et l'écrire dans le fichier. Maintenant, j'ai appris à l'endroit où je suis censé écrire ce nombre dans le fichier. Je suis un peu coincé avec ça.

Voici la définition de type pour le "grand nombre"
Code: [ Select ]
#define MAX 300

typedef int BigNumber[MAX];
BigNumber N;
  1. #define MAX 300
  2. typedef int BigNumber[MAX];
  3. BigNumber N;


et voici la fonction où j'ai lu le numéro du fichier de l'.
Code: [ Select ]
void readbignumberFromfile(BigNumber N, FILE * file)
{
  char str[MAX];
  int i;
  fscanf(file,"%s", str);
            
  N[0] = strlen(str);  
    
  for (i = strlen(str)-1; i>=0; i--)
        N[N[0]-i] = chrtoint(str[i]);
}

int chrtoint(char a)
{
    int i;
    for (i = 48; i<=57; i++){
       if ( (char)(i)==a) return i-48;
  }
    return -1;    
}
  1. void readbignumberFromfile(BigNumber N, FILE * file)
  2. {
  3.   char str[MAX];
  4.   int i;
  5.   fscanf(file,"%s", str);
  6.             
  7.   N[0] = strlen(str);  
  8.     
  9.   for (i = strlen(str)-1; i>=0; i--)
  10.         N[N[0]-i] = chrtoint(str[i]);
  11. }
  12. int chrtoint(char a)
  13. {
  14.     int i;
  15.     for (i = 48; i<=57; i++){
  16.        if ( (char)(i)==a) return i-48;
  17.   }
  18.     return -1;    
  19. }


comment pourrait-il être fait facilement à écrire le numéro dans le fichier. Si convertir le nombre de int à char, puis écrire ou comment devrait-il être fait?
J'ai essayé ce genre de fonction mais il ajoute que certains kinf de carrés dans le fichier.
Code: [ Select ]

void writebignumberTofile(BigNumber N, FILE * file)
{    
  int i;
  for (i = N[0]-1; i>=0; i--)
   putc(N[i], file);    
}
  1. void writebignumberTofile(BigNumber N, FILE * file)
  2. {    
  3.   int i;
  4.   for (i = N[0]-1; i>=0; i--)
  5.    putc(N[i], file);    
  6. }
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Avril 6th, 2011, 12:02 pm

  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Avril 6th, 2011, 1:17 pm

putc imprime un caractère dans le fichier. À l'heure actuelle votre imprimer le caractère ASCII qui est représenté par le nombre numérique dans votre tableau.

Image
http://digitalsushi.com/midashi/

Essayez d'ajouter 48 à chaque numéro à enregistrer dans le fichier.

Code: [ Select ]
putc(N[i]+48, file);


Vous pouvez également utiliser la fonction itoa: http://www.cplusplus.com/reference/clib ... dlib/itoa/
#define NULL (::rand() % 2)
  • scaramanga
  • Born
  • Born
  • No Avatar
  • Inscription: Avr 06, 2011
  • Messages: 4
  • Status: Offline

Message Avril 6th, 2011, 10:31 pm

Oh oui, bien sûr. Je vous remercie :)
  • scaramanga
  • Born
  • Born
  • No Avatar
  • Inscription: Avr 06, 2011
  • Messages: 4
  • Status: Offline

Message Avril 14th, 2011, 10:21 am

Bonjour à nouveau,

Maintenant, je suis coincé dans une partie d'un autre sur ce programme.
Lorsque le programme lit les "BigNumber" à partir du fichier et de soustraire un certain nombre que l'utilisateur d'inscription. Il n'a pas l'écrire dans le fichier correctement. Disons que j'ai un numéro 123456789 dans le fichier. Puis je soustrais de cette 123456787. Le résultat est 2. Il le fait très bien, mais le nombre qui se trouve dans le fichier est 223456789. Il met les 2 en tant que premier numéro comme il se doit, mais comment puis-je me débarrasser de tous les autres numéros qui ont été, après le nouveau numéro dans le fichier?
Voici la partie où je l'ai écrit dans le fichier.
Code: [ Select ]
void writebignumberTofile(BigNumber N, FILE * file)
{
    
  int i;
  for (i = N[0]; i>0; i--)
   putc(N[i]+48, file);    
}
  1. void writebignumberTofile(BigNumber N, FILE * file)
  2. {
  3.     
  4.   int i;
  5.   for (i = N[0]; i>0; i--)
  6.    putc(N[i]+48, file);    
  7. }


Ou est-il un problème dans la fonction soustraction
Code: [ Select ]
 void Sub(BigNumber N, BigNumber X)
 {
  int i, j;
 
  for (i=1; i<=N[0]; i++)
   if (X[i]>N[i])    
   {
     j = i;
    
     while (N[++j] == 0);
     N[j]--;
    
     j--;
    
     while (j>i)
     {
      N[j] = 9;
      j--;
     }
    
     N[i] += 10;
     N[i] -= X[i];
   }
   else
   {
     N[i] -= X[i];
   }
  
  while ((N[N[0]] == 0) && (N[0]>0))
  N[0]--;
 }
  1.  void Sub(BigNumber N, BigNumber X)
  2.  {
  3.   int i, j;
  4.  
  5.   for (i=1; i<=N[0]; i++)
  6.    if (X[i]>N[i])    
  7.    {
  8.      j = i;
  9.     
  10.      while (N[++j] == 0);
  11.      N[j]--;
  12.     
  13.      j--;
  14.     
  15.      while (j>i)
  16.      {
  17.       N[j] = 9;
  18.       j--;
  19.      }
  20.     
  21.      N[i] += 10;
  22.      N[i] -= X[i];
  23.    }
  24.    else
  25.    {
  26.      N[i] -= X[i];
  27.    }
  28.   
  29.   while ((N[N[0]] == 0) && (N[0]>0))
  30.   N[0]--;
  31.  }
  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Avril 14th, 2011, 12:23 pm

Il a probablement quelque chose à voir avec votre fonction soustraire. En outre la fonction d'impression me semble étrange. Votre utilisation du premier élément à déterminer combien de nombres à imprimer. Est-ce que premier élément toujours contenir la longueur du nombre?
#define NULL (::rand() % 2)
  • scaramanga
  • Born
  • Born
  • No Avatar
  • Inscription: Avr 06, 2011
  • Messages: 4
  • Status: Offline

Message Avril 15th, 2011, 3:54 am

Yep, le premier élément contient toujours la longueur du numéro. Il est plus facile à manipuler lorsque l'on compare le nombre qui est plus grande.

J'ai testé encore hier et semblait bien si j'ai ajouté le caractère n \ après avoir repris à un fichier. Avez-faire d'autres tests pour voir si elle fonctionne correctement. Ne pas savoir si c'est la bonne solution, est-il?
  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Avril 15th, 2011, 1:18 pm

Quand j'ai écrit mon numéro de gros / grosse programme int je Classes C + + et également surchargé les opérateurs. Cela dépend vraiment de ce que sont les exigences. J'aurais probablement sous retourner une nouvelle BigNumber à préserver à la fois le nombre initial, mais je ne sais pas quelles sont les exigences.
#define NULL (::rand() % 2)

Afficher de l'information

  • Total des messages de ce sujet: 7 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 99 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC