2015-05-23 2 views
0

Программа почти работает, но я не уверен, как сделать файл .txt для этого, не давая мне ошибку.Программа почти работает, проблема с операцией с файлом

проект просит меня:.

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

Второй файл будет версией первого файла, но написан в секретном коде. Хотя существуют сложные методы шифрования, вы должны например, вы можете прочитать первый файл по одному символу за раз и добавить 10 в код ASCII каждого символа до того, как он будет записан во второй файл. "

#include <iostream> 
#include <fstream> 
using namespace std; 

int main() 
{ 
    char ch; 
    fstream fin, fout; 
    fin.open("testone.txt", ios::in); 
    fout.open("encrypted.txt", ios::out); 

    while (!fin.eof()) 
    { 
     fin.get(ch); 
     fout.put(ch + 10); 
    } 

    fin.close(); 
    fout.close(); 
    system("pause"); 
    return 0; 
} 
+0

http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong – Steephen

+0

Не уверен в вашем вопросе. Вы получаете выходной файл или нет? – Tim3880

+0

его предоставление мне (errorLNK1561), в котором говорится, что точка входа должна быть определена, но я не уверен, что именно не так. У меня есть файл в том же месте, что и программа и его имя правильно. – kingerick

ответ

0

Не на моем Visual C, но вам может понадобиться #include <cstdlib> получить system

LNK1561 означает, что ваша основная функция может Очевидно, что основная функция присутствует, поэтому это необходимо сбор. Следуйте за предложением Beta и убедитесь, что вы можете скомпилировать и запустить тривиальную программу.

Ввод проблем с компиляцией, этот код не будет работать.

Общая проблема: вы не проверяете какие-либо ошибки на этом пути, так что ваша программа не может сказать, что что-то пошло не так.

Например, что, если файл не открывается? while (!fin.eof()) становится бесконечным циклом. Если файл не открыт, вы никогда не сможете прочитать EOF. Попытка использовать EOF в качестве условия цикла - это плохая идея. Определенно read the link in @Steephen's comment.

Если вы не можете прочитать символ с fin.get(ch);, то что? Текущий код пытается использовать символ в любом случае. Плохая идея.

Тестирование потока довольно просто. if (!fin) выполняет эту работу. Узнайте, как работают потоки, чтобы узнать почему. Тщательный простой тест не говорит вам, что пошло не так, но, по крайней мере, вы знаете, что что-то пошло не так.

Чтобы упростить задачу, большинство функций потока возвращают поток. Это позволяет объединить операции потока и сделать if (!fin.get(ch)) простым способом определить, работало ли get.

Таким образом, ваш цикл IO может быть столь же просто, как

while (fin.get(ch) && fout.put(ch + 10)) 
{ 
} 

Если get не мог получить ch по любой причине - неоткрыто файла, конец файла, нечитаемый файл - выход из цикла в while. Впоследствии вы можете запросить fin, чтобы узнать, почему. Если EOF, удивительный. Если не EOF, выходной файл, вероятно, ошибочен.

То же самое применимо к put.Если put не удалось, цикл завершается. Проверьте, почему и решите, хотите ли вы сохранить файл.

Я также рекомендую отказаться от быстрого теста в конце основного экрана, чтобы распечатать чек.

fin.open("encrypted.txt", ios::in); 
while (fin.get(ch) && std::cout.put(ch - 10)) 
{ 
} 

Лучшим испытанием было бы прочитать символ, отменить шифрование и сравнить с исходным вводом.

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