C ++ Путаница. Чтение целых чисел из текстового файла. Конвертировать в ASCII - PullRequest
11 голосов
/ 09 февраля 2010

Я изучаю C ++ впервые. У меня нет предыдущего опыта программирования.

В своей книге я видел этот пример.

#include <iostream>

using::cout;
using::endl;

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

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

    return 0;
}

Пример имеет смысл: выведите целое число и его представление в ASCII.

Теперь я создал текстовый файл с этими значениями.

48
49
50
51
55
56
75

Я пишу программу для чтения этого текстового файла - "theFile.txt" - и хочу преобразовать эти числа в значение ASCII.

Вот код, который я написал.

#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;
}

Это мое понимание второй показанной программы.

  • Компилятор не знает точный тип данных, который содержится в "theFile.txt". В результате мне нужно указать его, чтобы я решил прочитать данные в виде символа.
  • Я прочитал каждую цифру в файле как символ, преобразовал ее в целочисленное значение и сохранил в "theinteger".
  • Так как у меня есть целое число в "theinteger", я хочу распечатать его как символ, но char thechar = char (theinteger); не работает как положено.

Что я делаю неправильно?

Ответы [ 2 ]

6 голосов
/ 09 февраля 2010

Вы читаете символ за символом, но вы действительно (я думаю) хотите прочитать каждую последовательность цифр как целое число. Измените ваш цикл на:

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

+ 1 Для очень хорошо отформатированного и выраженного первого вопроса, кстати!

2 голосов
/ 09 февраля 2010

Вы читаете по одному символу за раз из файла. Следовательно, если ваш файл содержит:

2424

Сначала вы прочитаете символ «2» из файла, преобразуете его в целое число, а затем снова в символ, который напечатает «2» на cout. В следующем раунде будет напечатано «4» и т. Д.

Если вы хотите прочитать числа как полные числа, вам нужно сделать что-то вроде:

int theinteger;
thestream >> theinteger;
cout << char(theinteger) << endl;
...