2013-05-03 2 views
0

Когда я прочитал файл TestData.txt, он дал мне неправильный вывод. Что я делаю не так. Я использую int array, поэтому я могу выполнить MergeSort после сохранения данных в массив.ifstream wint read all integer

TestData.txt 
------------------- 
31791 564974 477059 269094 972335 
739154 206345 634644 227684 398536 
910177 507975 589785 67117 395140 
598829 372499 364165 450187 996527 
700285 263407 918021 661467 457544 
656297 846316 221731 240676 68287 
913 141702 845802 477617 109824 

{ 
int myArray[1000]; 
    int i; 
    //reading givin data 
    const char* filename= "TestData.txt"; 
    ifstream file(filename); 
    if(file.is_open()) 
    { 
     for(i = 0; i <=999; ++i) 
     { 
      file >> myArray[i];//storing data to array 


     } 
    } 
+1

Что такое неправильный выход и откуда оно взялось? –

+2

Вы пытаетесь прочитать 1000 записей из файла. Он содержит много цифр? – juanchopanza

+0

Ваш код ввода, возможно, хорошо, проблема связана с вашим кодом вывода или с кодом между ними. – john

ответ

-3

INT, если я не ошибаюсь может хранить данные от -32768 до 32767. Так что, если у вас большие значения, чем что (которые у вас есть, от вашего исходного файла), вы не будете иметь результаты вы ожидаете.

Кстати, было бы неплохо узнать, какой результат вы получаете.

+2

Это минимальные требования к 'int'. Большинство компиляторов позволяют вам иметь большие числа в 'int'. – john

+0

прав, но ... все же, если код кажется законным, это единственное, о чем я могу думать ... – Davide

+1

Ошибка, вероятно, будет в коде, который он не опубликовал. Все слишком распространено. – john

0

Вы читаете 1000 статей из своего файла, в котором содержится менее 1000 целых чисел. Первые значения вашего массива должны быть правильными, но после того, как вы достигнете конца вашего файла, оператор >> ничего не будет готов.

Например вот один способ написать это:

const char* filename= "TestData.txt"; 

std::vector<int> myArray; 
std::ifstream file(filename); 
if(file.is_open()) 
{ 
    int v; 
    while(file >> v) { 
     myArray.push_back(v); 
    } 
} 
+0

Стандартный способ чтения файла: 'while (file >> v) {my_array.pushback (v);}'. Или вы можете искать Stack Overflow для «C++ iterator ifstream vector», чтобы использовать итератор, чтобы сделать это за вас. –

1

нужно проверить, если вы ifstream является end of file, в этом случае вы получите значение мусора из другого файла, связанного.

С одной модификацией код будет в порядке.

Изменение:

for(i = 0; i <=999; ++i) 

к:

for(i = 0; i <=999 && !file.eof(); ++i) 
Смежные вопросы