Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    13

    [C++] lettura stringa da file con gets

    Chiave.txtCiao a tutti!! Sto cercando di compilare un algoritmo che mi codifichi e decodifichi una stringa in base ad una chiave inserita come .txt sul desktop.. Premetto che ora sto solo provando se funzioni e appena funzionerà come deve cercherò di migliorarla creando una classe.. Ora però ho un problema con la funzione gets(): prima non avevo ancora le due procedure cripto e decripto funzionava come doveva; ora eseguendo mi salta la lettura della stringa. Sostituendola con cin funziona ma non legge gli spazi, prima addirittura non avevo nemmeno dichiarato stringa come array con dimensione MAX (l'avevo allocata dinamicamente) con:
    char* stringa= new char;
    gets(stringa);
    ...
    ...
    puts(stringa);
    e funzionava bene (non avevo un numero massimo di caratteri da poter inserire).
    Ora però non funziona più.. Potere aiutarmiii, Grazie in anticipo. Ho allegato anche la chiave se volete provarlo.
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    #include <fstream>
    
    
    #define MAX 1000
    
    
    void decripto(char*, const char* const);
    void cripto(char*, const char* const );
    
    
    using namespace std;
    
    
    char alp[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' '};
    
    
    int main(){
       ifstream cinf("C:\\Users\\chris\\Desktop\\Chiave.txt", ios::in);
        if (cinf.good()){
           char ch[28];
           cinf>>ch;
           int risposta=0;
           do{
           puts("Vuoi criptare o decriptare"
                   "[1/2]");
           cin>>risposta;
           if (risposta==1){
               char stringa[MAX]; 
               gets(stringa);
               cripto(stringa, ch);
               puts(stringa);
    
    
           }
           else if(risposta==2){
               char stringa[MAX]; 
               gets(stringa),
               decripto(stringa, ch);
               puts(stringa);
                   }
           else {
               system("cls");
               cout<<"Risposta non contemplata, Riprova.";
               continue;
           }
           cout<<"Ti servo ancora?"<<endl;   
        }
           while(risposta);
      system("PAUSE");    
      return 0;
    }
    }
    
    
    
    void cripto(char* str, const char* const chiave){
         int cont=0 ;
           do {
               for(int i=0; i<27;i++){
                   if  (*str==alp[i]){
                       *str=*(chiave+i);
                       cont++;
                       break;
                   }
                   
               }
            str++;    
           }
           while (*str);   
    }
    
    
    void decripto(char* str, const char* const chiave){
         int cont=0 ;
           do {
               for(int i=0; i<27;i++){
                   if (*str==*(chiave+i)){
                       *str=alp[i];
                       cont++;
                       break;
                   }
                   
               }
            str++;    
           }
           while (*str);   
    }
    Ultima modifica di chrisco; 30-06-2016 a 01:38

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    dopo l'input della scelta svuota il buffer di tastiera con cin.ignore

    Fai una ricerca nel forum ... ci sono parecchi casi
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    13
    Mettendo cin.ignore() ora addirittura il programma va in carsh, il fatto é che vorrei capire perché ora non mi funziona piu gets() mentre puts() funziona...grazie in anticipo

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il crash non è causato dall' ignore. Quello serve a sistemare il problema dell'input.

    Per il crash, che è un altro problema, individua dove avviene eseguendo passo passo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    13
    Ah grazie penso di aver risolto, una domanda ma se invece di dichiarare stringa come array la alloco dinamicamente può funzionare bene? In modo di non avere una grandezza di stringa massima...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Allocare dinamicamente non significa non avere una lunghezza massima ... non capisco cosa intendi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    13
    Si lo so, ma il fatto é che funziona cioè invece di char stringa[MAX] ho messo char*stringa = new char; appunto l'ho allocata dinamicamente e funziona , o meglio funziona la metà delle volte, possibile mai che per non far allocare tutto quel vettore debba usare solo la classe string?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    13
    Non so se mi sono spiegato: io vorrei inserire una stringa, e poi allocare solo la memoria per contenere quella stringa... Si può fare?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da chrisco Visualizza il messaggio
    Non so se mi sono spiegato: io vorrei inserire una stringa, e poi allocare solo la memoria per contenere quella stringa... Si può fare?
    Quello che hai scritto alloca un solo carattere e poi vai a scrivere nella memoria del processo sporcando i dati delle altre variabili. La conseguenza non è prevedibile ma è una operazione sbagliata e fonte di crash.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    13
    Ah ecco perché andava in crash... Hai qualche soluzione per inserire la stringa e poi allocare tutti i suoi caratteri ? Grazie tante comunque mi stai davvero chiarendo le idee

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.