[C++] stesso codice ma errori con compilatori diversi

di il
19 risposte

[C++] stesso codice ma errori con compilatori diversi


#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?

19 Risposte

  • Re: [C++] stesso codice ma errori con compilatori diversi

    Dopo l'input del nome del file metti una fflush

    cin >> NomeFile;
    fflush(stdin);
  • Re: [C++] stesso codice ma errori con compilatori diversi

    oregon ha scritto:


    Dopo l'input del nome del file metti una fflush

    cin >> NomeFile;
    fflush(stdin);
    messo, ma non risolve.
  • Re: [C++] stesso codice ma errori con compilatori diversi

    Hai ricompilato?
  • Re: [C++] stesso codice ma errori con compilatori diversi

    Fflush non funziona con visual studio 2015. non dà errori di alcun tipo ma è come se venisse ignorato.
    devi gestirti con cin.ignore(): prova a inserire quest'istruzione
    cin.ignore('\n', INT_MAX)
    subito dopo il cin che viene prima di quello della stringa (nel tuo caso, mettilo dopo cin >> i).

    p.s.: visto che utilizzi il c++ perchè non utilizzi due stringhe come nomi per i due file anziché un array di char?
  • Re: [C++] stesso codice ma errori con compilatori diversi

  • Re: [C++] stesso codice ma errori con compilatori diversi

    Pietrob0b ha scritto:


    L'ho inserito, però adesso non escono subito dopo le cout successive, ma dopo qualche volta che premo enter. Il problema di prima comunque persiste. allora prova a fare soltanto cin.ignore('\n')
  • Re: [C++] stesso codice ma errori con compilatori diversi

  • Re: [C++] stesso codice ma errori con compilatori diversi

    Con il 2012 e la fflush funziona regolarmente e mi sembra strano che con il 2015 non funzioni.

    Adesso posta nuovamente il codice corretto, che hai ricompilato, senza linee di codice o commenti che non servono e lo ricontrollo.
  • Re: [C++] stesso codice ma errori con compilatori diversi

    oregon ha scritto:


    Con il 2012 e la fflush funziona regolarmente e mi sembra strano che con il 2015 non funzioni.

    Adesso posta nuovamente il codice corretto, che hai ricompilato, senza linee di codice o commenti che non servono e lo ricontrollo.
    corretto secondo il tuo consiglio o di Çlÿkÿ~?
  • Re: [C++] stesso codice ma errori con compilatori diversi

    Secondo quello che ti ho detto io...
  • Re: [C++] stesso codice ma errori con compilatori diversi

    oregon ha scritto:


    Secondo quello che ti ho detto io...
    
    #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];         
          char NomeFileDc[15];    
          string messaggio;         
          string msgcry;            
          char messaggiou[1000];       
    
          Beep(500, 76);             // 523 hertz (C5) for 500 milliseconds     
    
          FILE *pf;      
          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;
             fflush(stdin);
    
             pf = fopen(NomeFile, "w");
    
             if (pf) //
             {
                cout << "Inserisci testo : ";                                         
                fflush(stdin);
                getline(cin, messaggio);                                          
                msgcry = ccript(messaggio, true);                                   
                cout << "\nTesto criptato con successo!\n\n";
                cout << "Testo criptato: " << msgcry << endl;                              
                fprintf(pf, "%s\t", msgcry.c_str());  
                                   
                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;
             fflush(stdin);
    
             fdc = fopen(NomeFileDc, "r");
    
             if (fdc)
             {
                fgets(messaggiou, 1000, fdc);
                cout << ("testo da decriptare: ")
                   << ("%s", messaggiou)                                          
                   << "\ntesto decriptato: " << ccript(messaggiou, false) << endl;            
                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;
    }
    
  • Re: [C++] stesso codice ma errori con compilatori diversi

    E così a me funziona.

    Invece cosa succede a te se dopo aver ricompilato esegui il codice del menu 1 o del menu 2 ?
  • Re: [C++] stesso codice ma errori con compilatori diversi

    oregon ha scritto:


    E così a me funziona.

    Invece cosa succede a te se dopo aver ricompilato esegui il codice del menu 1 o del menu 2 ?
    Stessa cosa descritta nel problema iniziale. Con cosa hai compilato? Perché anche a me funziona con DEV-C++.
  • Re: [C++] stesso codice ma errori con compilatori diversi

    VS2012

    Ma nel caso 2 (decripta) non esiste il problema perché non c'è altro input dopo l'inserimento del nome del file ...

    Puoi postare uno zip con il progetto?
Devi accedere o registrarti per scrivere nel forum
19 risposte