2015-11-15 2 views
-4

Всего два дня назад я, по-видимому, нашел решение, чтобы моя программа работала и работает правильно. Я говорю, по-видимому, потому, что сегодня я пытаюсь использовать его, но он больше не работает. Я не делаю никаких изменений в коде, поэтому я не понимаю, по какой причине он больше не выполняется. Теоретически эта программа должна открыть .dat-файл, прочитать и разобрать его, извлекая только тот столбец, который мне нужен, в этом случае второй. Как только exctract столбца, он будет вычислять среднее из данных с помощью набора из 120 элементов, используя массив. Два дня назад он работал правильно, сегодня он не дает никакого вывода, а функции отладки не показывают никаких ошибок. код заключается в следующем:Почему эта программа не дает выход?

#include <iostream> 
#include <fstream> 
#include <string> 
#include <sstream> 

using namespace std; 

#define FATAL(MSG) do { \ 
    std::cerr << "Errore: " << MSG << '\n'; \ 
    exit(1); \ 
} while (false) 

int main() 
{ 
    std::ifstream fin ("P01-05 tensione di vapore di riferimento fino      180°C.dat"); 
    if (fin.is_open()) 
    { 
     std::ofstream fout("tmean.dat"); 
     if (fout.is_open()) 
     { 
      fout << "Tmean\n"; 
      std::string line; 
      while (getline(fin, line)) 
     { 
      const int group_size = 120; 
      double temp[group_size]; 
      double total = 0; 
      for (int i=0; i < group_size; ++i) 
      { 
       if (getline(fin, line)) 
       { 
        std::istringstream ss(line); 
        double time; 
        if (ss >> time >> temp[i]) 
         total += temp[i]; 
        else 
         FATAL("unable to parse 2 doubles from line '" 
           << line << "' for [" << i << ']'); 
       } 
       else 
        // will rarely happen after checking !eof() 
        FATAL("failed to read needed line from file for [" 
          << i << ']'); 
      } 
      double tmean = total/group_size; 
      fout << tmean << '\n';  
     } 
    } 
    else 
     FATAL("could not open output file."); 
     fout.close(); 
} 
else 
    FATAL("non si puo aprire il file."); 
    fin.close(); 

return 0; 
} 
+1

Пожалуйста, прочитайте [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). – GingerPlusPlus

+2

Скомпилируйте свою программу со всеми предупреждениями и информацией об отладке (например, 'g ++ -Wall -Wextra -g', если вы используете [GCC] (http://gcc.gnu.org/) ....), затем ** используйте отладчик * * (например, 'gdb') для запуска вашей программы шаг за шагом и т. д. –

+1

Имеет ли в имени файла такое большое количество пробелов? Если он есть, он все еще доступен из вашего текущего каталога, (поскольку вы не используете абсолютный путь). –

ответ

0

Ваша программа компилируется и работает для меня. Отсутствие фатальных сообщений stdio, поступающих из вашего кода, может означать, что все работает. Я смог вызвать все сообщения FATAL. Убедитесь, что dioporco.dat не записывается где-то еще в вашей файловой системе. Что может случиться, так это то, что при запуске программы «текущий каталог» - это не то, что вы думаете, и программа запускается где-то в другом месте, и поэтому dioporco.dat записывается «там». Вы также можете попробовать изменить dioporco.dat на полное имя, например «/home/myuser/dioporco.dat». Поскольку open написан сейчас, этот файл будет создан везде, где ОС считает, что текущий каталог задан, когда программа выполняется. Найдите свою файловую систему для dioporco.dat, и вы можете найти ее создание успешно.

+0

Благодарим вас за ответ. Я применил ваше предложение, но оно больше не дает результата! Я очень расстроен –

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