Форум программистов, компьютерный форум CyberForum.ru

Зашифровать файл, используя исключающее или - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Структуры в языке C++ и не только http://www.cyberforum.ru/cpp-beginners/thread1208487.html
Вообщем, предыстория такая: для зачета нужно сдать 14 лабораторных, 11 из которых уже выполнено. Все бы ничего, но есть такие, которые в упор не осознаю в полной мере. В данном случае структуры и работа с файлами. Ну хоть убей, не понимаю. Вот решил спросить, как делать. Я здесь новенький, сильно камнями не забрасывайте) Это задача по структуре: Известны данные о массе и объеме n тел,...
C++ В одномерном массиве, состоящий из n действительных элементов, вычислить: В одномерном массиве, состоящий из n действительных элементов, вычислить: 1) количество элементов массива, лежащих в диапазоне от A до B; 2) сумму элементов массива, расположенных после максимального элемента. Упорядочить элементы массива по убыванию модулей элементов. Буду благодарен за помощь. http://www.cyberforum.ru/cpp-beginners/thread1208484.html
C++ Обратный обход (постфиксный) дерева
Помогите реализовать постфиксный обход дерева.
C++ Подсчет количества заглавных букв в тексте
С клавиатуры вводится строка. Составить программу, которая подсчитывает количество заглавных букв в тексте; выводит на экран слова, имеющие наименьшее количество букв.
C++ что я делаю не так? в двусвязном списке? http://www.cyberforum.ru/cpp-beginners/thread1208444.html
struct PLAYERS { char name , family ; int goals , usage , bad_time ; PLAYERS* next, *prev ; } ; PLAYERS* head = 0 ; PLAYERS* tail = 0 ; PLAYERS* curr = 0 ;
C++ Сумма элементов строки и столбца В заданной действительной квадратной матрицы порядка n найти сумму элементов строки и столбца, на пересечении которых расположены элемент с наименьшим значением. подробнее

Показать сообщение отдельно
LostDok
 Аватар для LostDok
0 / 0 / 0
Регистрация: 15.06.2014
Сообщений: 49
15.06.2014, 13:54     Зашифровать файл, используя исключающее или
Здравствуйте.

Задача:

Есть файл, в котором записаны какие-то символы. Надо поочередно брать каждый символ и менять в нем 1 на 0 и 0 на 1 с помощью XOR. Например, символ 'a' это 01100001. После выполнения программы должно быть: 10011110
Еще обязательное условие. Можно использовать только один указатель на файл! Работаем с одним указателем на файл и используем функцию fseek.


Вот что я написал:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "stdafx.h"
#include <iostream>
#include <cstdio>
 
#pragma warning(disable: 4996);
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *fp;
    char ch;
 
    fp = fopen("D:\\file.txt", "r+");
 
    if(fp == NULL)
    {
        cout << "File is not opened" << endl;
        exit(1);
    }
 
    cout << "File is open." << endl;
 
    while( (ch = fgetc(fp)) != EOF)
    {
        fseek(fp, -1, SEEK_CUR);
        ch ^= 0xFF;
        fputc(ch, fp);
    }
 
    fcloseall();
    
    system("D:\\file.txt");
 
    return 0;
}
Цикл зацикливается.
Выяснил, что у меня почему-то fgetc(fp) постоянно присваивает в ch второй символ из файла.


Логика моего цикла следующая:

1. ch = fgetc(fp) - присвоил в ch символ из файла и сдвинул указатель на 1 вперед (допустим была позиция 0, сейчас - 1).
2. fseek(fp, -1, SEEK_CUR) - сдвинул указатель на 1 назад (была 1, стала 0).
3. fputc(ch, fp) - положил ch в нужную позицию в файле и сдвинул указатель на 1 вперед (было 0, стало 1).

В чем моя ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru