2015-03-19 4 views
0

Я делаю программу для локального ... места, и это программа, которая рассчитает, сколько нужно заказать пиццу. Проблема, однако, не является даже вычислением, а скорее файлами, которые сохраняют вход в систему I.D. данные.Выполнение нерегулярного кода

#include <iostream> 
#include <stdlib.h> 
#include <iomanip> 
#include <fstream> 

using namespace std; 
string logs[20]; 

void test(ifstream& IN, string logs[], ofstream& OUT); 
void introduction(); 
int logging_in(string id, string logs[]); 
void menu(); 


string newl = "\n"; 
string dnewl = "\n\n"; 
string tnewl = "\n\n\n"; 
string qnewl = "\n\n\n\n"; 
string pnewl = "\n\n\n\n\n"; 



int main() 
{ 

    ifstream IN; 
    ofstream OUT; 


    string id; 

    IN.open("loginn.dat"); 

    cout << IN.is_open(); 

    test(IN, logs, OUT); 



string sup; 
    int receive = 0; 
    introduction(); 










    return 0; 
} 

void test(ifstream& IN, string logs[], ofstream& OUT) 
{ 
    for (int x = 0; x < 20; x++) 
    { 
     IN >> logs[x]; 
    } 

    IN.close(); 
    OUT.open("loginn.dat"); 

    for (int x = 0; x < 20; x++) 
    { 
     OUT << logs[x] << " " << "hue" << " "; 

    } 
} 

void introduction() 
{ 
    string cont; 

    cout << "Hello. I am the..." << dnewl 
     << "Statistical" << newl << "Pizza" << newl 
     << "Order" << newl << "Amount" << newl 
     << "Diagnostic." << dnewl 

     << "Otherwise known as Pizzahand. I will be assisting you to estimate the \namount of pizza that is to be ordered for <INSERT NAME>, as to \neliminate excessive ordering." 
     << tnewl; 

     cout << "Press Enter to continue..." << newl; 
     cin.get(); 
} 

Теоретически это должно выводить массив «logs []» перед выполнением остальной части кода. Это было так, когда у меня не было никаких функций в дополнение к основной функции. Как только я начал использовать свою следующую функцию, «введение()», код для чтения текстового файла здесь

for (int x = 0; x < 20; x++) 
     { 
      IN >> logs[x]; 
     } 

, казалось, выбили из строя. Вместо выполнения этой задачи перед чем-либо еще, кажется, что она делает это в самом конце программы, как я протестировал, выведя ее содержимое, пока программа все еще читала «test()», без везения. Однако после того, как основная функция возвращает «0», я вижу, что моя программа вывела данные в тестовый файл «loginns.dat», правильно. Для моей программы обязательно, чтобы эти данные идентификатора входа в систему считывались в начале, как когда программа переходит на вход в систему, данные необходимы. Кроме того, я попытался разместить эти массивы и для циклов в разных местах: в самих функциях входа, в основной функции и даже в другой функции, которую я создал из отчаяния.

Я искал часы о том, как решить это безрезультатно, и экспериментировал сам в течение многих часов. Каждый шаг, который я предпринял, чтобы попытаться исправить это, привел к более тупикам или другим вопросам. Я довольно новичок в том смысле, что этот учебный год является первым годом изучения C++, и я отчаянно нуждаюсь в экспертном заключении (или любом знающем), чтобы помочь мне в правильном направлении.

спасибо.

+0

Я пытался понять, в чем ваша проблема, но я не был успешным. –

ответ

0

Вам просто нужно очистить поток после записи в него:

for (int x = 0; x < 20; x++) 
{ 
    OUT << logs[x] << " " << "hue" << " "; 
} 
OUT.flush(); 

Причина такого странного поведения является то, что потоки файлов не обязательно писать в файлы сразу, когда вы пишете им. По соображениям эффективности они записывают данные во внутренний буфер памяти (область памяти, используемую потоком), а затем записывают содержимое буфера в файл все сразу, когда буфер очищается. Когда приложение заканчивается, все буферы потока автоматически очищаются, поэтому вы видите, что файл был записан после завершения вашей программы. Однако вы можете сделать их раньше, как показано выше. Это может случиться и при заполнении буфера.

Вы также можете вызвать флеш, используя endl маркер, который записывает символ новой строки и очищает буфер, как это:

for (int x = 0; x < 20; x++) 
{ 
    OUT << logs[x] << " " << "hue" << " " << endl; 
} 
+0

Ничего себе, спасибо за объяснение! Ваше предложение работало как шарм. Хотя я знал об «endl», я не знал, что на самом деле это сыграло свою роль, кроме создания новой линии. Еще раз спасибо! – IdidItAgain

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