2010-02-09 18 views
11

J'apprends le C++ pour la première fois. Je n'ai aucun antécédent de programmation.C++ Confusion. Lecture d'un entier à partir d'un fichier texte. Convertir en ASCII

Dans le livre que j'ai, j'ai vu cet exemple.

#include <iostream> 

using::cout; 
using::endl; 

int main() 
{ 
    int x = 5; 
    char y = char(x); 

    cout << x << endl; 
    cout << y << endl; 

    return 0; 
} 

L'exemple a du sens: imprime un nombre entier et la représentation ASCII de celui-ci.

Maintenant, j'ai créé un fichier texte avec ces valeurs.

48 
49 
50 
51 
55 
56 
75 

Je vous écris un programme pour lire ce fichier texte - « theFile.txt » - et que vous voulez convertir ces chiffres à la valeur ASCII.

Voici le code que j'ai écrit.

#include <iostream> 
#include <fstream> 

using std::cout; 
using std::endl; 
using std::ifstream; 

int main() 
{ 
    ifstream thestream; 
    thestream.open("theFile.txt"); 

    char thecharacter; 

    while (thestream.get(thecharacter)) 
    { 
     int theinteger = int(thecharacter); 
     char thechar = char(theinteger); 
     cout << theinteger << "\t" << thechar << endl; 
    } 


    system ("PAUSE"); 
    return 0; 
} 

C'est ce que je comprends du deuxième programme montré.

  • Le compilateur ne connaît pas le type de données exact contenu dans "theFile.txt". Par conséquent, je dois le spécifier, donc je choisis de lire les données en tant que char.
  • J'ai lu chaque caractère du fichier sous la forme d'un caractère et l'ai converti en une valeur entière et stocké dans "l'entier".
  • Puisque j'ai un entier dans "l'entier" je veux l'imprimer comme un caractère mais char thechar = char (theinteger); ne fonctionne pas comme prévu.

Que fais-je incorrect?

+0

Alors, que * fait * votre programme en ce moment? – Sam

+0

Cela ne devrait-il pas être 'l'utilisation de std :: cout;'? – Manuel

+0

Merci d'avoir remarqué mon erreur. J'ai posé le mauvais code. Je vais le mettre à jour dans quelques minutes. – newbie

Répondre

2

Vous lisez un caractère à la fois à partir du fichier. Par conséquent, si votre fichier contient:

2424 

Vous lisez d'abord le char « 2 » du fichier, le convertir en un entier, puis revenir à un char, qui imprimera « 2 » sur Cout. Le prochain tour imprimera "4", et ainsi de suite.

Si vous voulez lire les chiffres que les numéros complets, vous devez faire quelque chose comme:

int theinteger; 
thestream >> theinteger; 
cout << char(theinteger) << endl; 
+0

Oh, je comprends. Un (char) acter est un seul. Oh mon pour mon erreur stupide. – newbie

6

Vous lisez omble chevalier par char, mais vous avez vraiment (je pense) vouloir lire chaque séquence de chiffres comme un entier. Changez votre boucle:

int theinteger; 
while (thestream >> theinteger) 
{ 
    char thechar = char(theinteger); 
    cout << thechar << endl; 
} 

+1 Pour une très bien formaté & exprimé première question, d'ailleurs!

+0

Oui, vous avez raison, Neil. Je veux lire chaque nombre aussi complètement. Chaque nombre est sur sa propre ligne. Est-il courant de faire des oublis comme ceci parce que vous avez l'intention de faire quelque chose mais que vous utilisez les commandes incorrectes? J'espère que cela à du sens. – newbie