2015-11-24 2 views
0

В моей программе, имя файла со значениями (в большинстве 2-х цифр) для чтения дается в терминале и мой основной(), как показано ниже:Преобразование читать символ в Int C++

int main (int argc, char *argv[]) 
{ 
    //assume argv[1] is a filename to open 
    ifstream the_file (argv[1]) 
    if (!the_file.is_open()){ 
     cout<<"Could not open file << endl; 
     return 0; 
    } 

    char x; 
    int array[10]; 
    int x_int; 
    while (the_file.get (x)){ 
     for (int i=0; i<10;i++){ 
      array[i] = (int)x; 
     } 
    } 

} 

Тем не менее, я получаю нечетное число.

Моя ошибка, безусловно, на array[i] = (int)x; линии, но

как я могу преобразовать считанное значение обугленного в целом? Или есть ли какой-либо другой метод для чтения их как типа int?

Я хочу иметь значения, взятые из входного файла работы в виде целых чисел, а не в виде одной цифры

Мой фактический входной файл (.txt) является:

75 
95 
1 
2 
45 
65 
98 
6 
7 
9 
+0

Что содержит файл? Последовательность цифр ('0' - '9'), последовательность чисел (возможно, многозначная) или двоичные данные? Приведите пример. – interjay

+0

@interjay, он имеет не более 2-значных чисел, таких как 55, 78, 2, 4. и т. Д. –

+1

Так что чтение его одного символа одновременно, как и в вопросе, вам не поможет, и не будет преобразовывать символ к int. Пожалуйста, отредактируйте вопрос, чтобы описать формат файла и нужный результат. – interjay

ответ

4

Как преобразовать значение read char в int?

Вы можете исправить это просто писать

array[i] = x - '0'; 

ASCII символы, такие как '1' или '5' не может быть непосредственно отливают, чтобы получить их числовые эквиваленты. При этом убедитесь, что вы читали символ цифры. используя функцию std::isdigit().


Что касается основного беспокойства после вопроса редактирования:

Или есть другой способ, чтобы прочитать их как целый тип?

Обычный метод для чтения в int типов просто применять std::istream& operator>>(std::istream&, int&) как так

int array[10]; 
int i = 0; 
int x_int; 
while (the_file >> x_int && i < 10) { 
    array[i] = x_int; 
    ++i; 
} 
+0

он дает мне массив, значения которого равны 9. –

+0

@Despicableme Каков ваш фактический вклад? –

+0

Я добавил как править вопрос –

0

простой способ решить ваши проблема заключается в использовании getline() и прочитайте его в char buf[MAX_LINE_LEN], где MAX_LINE_LEN - это максимальный размер входной линии. Вместо (int)x используйте atoi(buf). Вам нужно будет включить stdlib.h.

Вы также можете просто использовать оператор >> для чтения в array[i] напрямую. Если вам нужно читать по одному символу за раз, вы можете использовать вычисление num = num * 10 + (x - '0') при разрыве цикла на разделителях (без цифр), но это более сложное решение.

+0

Зачем это сложно? –

Смежные вопросы