2015-04-03 2 views
0

Я только начинаю работать на C++ и работаю над вопросами codeval, поэтому, если кто-то это сделает, они распознают эту проблему, так как она первая в списке. Мне нужно открыть файл с тремя столбцами целых чисел, разделенных пробелами. Вот мой, под fizbuz.txt. Мне нужно получить целочисленные значения из файла и сохранить их для дальнейшего использования в другом месте программы.Чтение целочисленных данных из файла

1 2 10 
3 5 15 
4 5 20 
2 8 12 
2 4 10 
3 6 18 
2 3 11 
8 9 10 
2 5 8 
4 9 25 

Теперь я могу открыть файл просто отлично, и я использовал GetLine() для чтения файлов просто отлично, используя мой код ниже. Тем не менее, я не хочу, чтобы они были в строчном формате, я бы хотел, чтобы они были целыми числами. Поэтому я огляделся, и все в основном говорят одно и то же обозначение (файл >> int1 >> int2 ...). Я написал какой-то код именно так, как я его видел в нескольких примерах, и он не ведет себя вообще, как будто они говорят мне об этом.

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 
int main() 
{ 
    string filename = "fizbuz.txt"; 
    string line; 
    int d1,d2,len; 
    int i =0; 
    int res1[10], res2[10], length[10]; 
    ifstream read (filename.c_str()); 
    if (read.is_open()) 
    { 
     // while(read>>d1>>d2>>len); 
     // { 
     //  res1[i] = d1; 
     //  res2[i] = d2; 
     //  length[i] = len; 
     //  i++; 
     // } 
     while (!read.eof()) 
     { 
      read>>d1>>d2>>len; 
      res1[i] = d1; 
      res2[i] = d2; 
      length[i] = len; 
     } 
     read.close(); 
    } 
    else 
    { 
     cout << "unable to open file\n"; 
    } 
    for (int j = 0; j < 10;j++) 
    { 
     cout<< res1[j] << " " << res2[j] << " " << length[j] << '\n'; 
    } 

} 

Оба цикла while выполняют то же самое в выходной функции внизу. Последняя строка fizbuz.txt будет возвращена первым элементам res1, res2 и length, а оставшиеся элементы всех 3 будут psuedorandom значениями, предположительно из любой программы, использующей этот блок памяти раньше. ех выход ниже

4 9 25 
32767 32531 32767 
-1407116911 4195256 -1405052128 
32531 0 32531 
0 0 1 
0 1 0 
-1405052128 807 -1404914400 
32531 1 32531 
-1405054976 1 -1404915256 
32531 0 32531 
+0

Вы забыли 'i ++' –

+0

Что делает i ++ в этом случае? – NathanielJPerkins

+0

@Thallazar Вы должны, вероятно, получить [хорошую книгу] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). – molbdnilo

ответ

1

Первая версия должна работать за исключением того, что вам нужно удалить ; в while линии.

while (read >> d1 >> d2 >> len); 
          ^
+0

Ах, я не понимал, что это было, или что это даже имело значение. Почему компилятор не выплюнул ошибку для чего-то подобного? – NathanielJPerkins

+0

@Thallazar Потому что это не ошибка компиляции. Это ваша ответственность, чтобы избежать таких опечаток. – herohuyongtao

0

Попробуйте

 while (!read.eof()) 
     { 
      read>>d1>>d2>>len; 
      res1[i] = d1; 
      res2[i] = d2; 
      length[i] = len; 
      i++; 
     } 
+0

Да, это работает для второй функции, и это глупость забыть в моей случай, однако, везде, где я смотрел, они рекомендовали первую нотацию, и я не забыл там i ++, так почему же это не работает? – NathanielJPerkins

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