#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <ostream>
#include <windows.h> //beep
#include <string> //stringhe C++
#pragma warning (disable : 4996)
using namespace std;
char oper(char a, bool op);
string ccript(string input, bool op);
int main()
{
do
{
int i = 0;
string s;
char NomeFile[15]; //nome file da criptare
char NomeFileDc[15]; //nome file da decriptare
string messaggio; //messaggio che si inserisce
string msgcry; //messaggio che si inserisce criptato
char messaggiou[1000]; //messaggio da leggere
Beep(500, 76); // 523 hertz (C5) for 500 milliseconds
FILE *pf; //testo con stringa criptata
FILE *fdc;//
cout
<< "1) Cripta\n"
<< "2) Decripta\n";
cin >> i;
fflush(stdin);
switch (i)
{
case 1:
cout << "Hai scelto 1 --> criptare\n"
<< "\ncome vuoi chiamare il file? aggiungi il .txt alla fine: ";
cin >> NomeFile;
pf = fopen(NomeFile, "w");
if (pf) //
{
cout << "Inserisci testo : "; //inserimento testo da criptare
// fflush(stdin);
getline(cin, messaggio); //mette in messaggio quello che scrivo da tastiera
msgcry = ccript(messaggio, true); //crypta messaggio e lo copia in msgcry
cout << "\nTesto criptato con successo!\n\n";
cout << "Testo criptato: " << msgcry << endl; //manda a schermo la stringa criptata
fprintf(pf, "%s\t", msgcry.c_str()); //scrive la stringa criptata nel file
Beep(900, 100);
Beep(900, 100);
Beep(900, 100);
}
else
{
cout << " Errore durante l’ apertura del file.";
Beep(250, 500);
}
fclose(pf);
fflush(stdin);
break;
case 2:
cout << "Hai scelto 2 --> decriptare\n";
cout << "\ncome si chiama il file? aggiungi il .txt alla fine: ";
cin >> NomeFileDc;
fdc = fopen(NomeFileDc, "r");
if (fdc)
{
fgets(messaggiou, 1000, fdc);
cout << ("testo da decriptare: ")
<< ("%s", messaggiou) //qui stampa a schermo la stringa ancora criptata
<< "\ntesto decriptato: " << ccript(messaggiou, false) << endl; //qui stampa a schermo la stringa decriptata
Beep(900, 100);
Beep(900, 100);
Beep(900, 100);
}
else
{
cout << "\nerrore durante l'apertura del file";
Beep(250, 500);
}
fclose(fdc);
break;
default:
break;
}
std::cin.sync(); //per risolvere bug v 2.2
std::cin.ignore(); //per risolvere bug v 2.2
} while (1);
return 0;
}
char oper(char a, bool op)
{
if (op)
return a + 3;
else
return a - 3;
}
string ccript(string input, bool op)
{
string n = "";
for (unsigned int i = 0; i<input.length(); i++)
if (input[i] >= 65 && input[i] <= 90)
n += (oper(input[i], op) > 90) ? (64 + oper(input[i], op) % 90) : oper(input[i], op);
else if (input[i] >= 97 && input[i] <= 122)
if (oper(input[i], op) > 122)
n += 96 + oper(input[i], op) % 122;
else
n += oper(input[i], op);
else
n += input[i];
return n;
}
Ho un problema con questo codice: con Dev C++ funziona alla "perfezione" mentre con Visual Studio 2015 ho un problema: sia nel criptare che decriptare dopo che inserisco il nome del file è come se mi saltasse l'istruzione dove inserisco il testo, ovvero viene scritto Inserisci testo: ed a capo subito Testo criptato con successo!
Stessa cosa con il decript dopo l'inserimento del nome del file, da solo le due cout ma vuote.
Qual'è il problema?