Cifrario di cesare con errori

Esaminate il programma che trovate in calce, rilevate gli errori e correggeteli.

Il programma deve:

Per ogni correzione, annotate un commento che spiega qual era l'errore e come l'avete corretto.

NOTA IMPORTANTE: effettuate le modifiche necessarie a correggere gli errori ma senza stravolgere il programma.

Cifrario di Cesare: Ogni lettera viene sostituita dalla lettera che la segue di k posti nell’alfabeto. Ad esempio se k vale 3, la lettera 'A' è sostituita dalla 'D', la 'B' dalla 'E' e così via fino alle ultime lettere che sonocifrate ripartendo dall’inizio dell’alfabeto (ad esempio 'Z' è sostituita con la 'C').

Il numero k è detto chiave di cifratura, mentre il messaggio che si ottiene è chiamato testo cifrato.

Ad esempio:

Nota: per verificare se avete cifrato correttamente un testo con una certa chiave k, applicate al testo cifrato una nuova cifratura con chiave 26−k: dovrete ritrovare il testo originale!

Esempio 1

Eseguendo

./Soluzione C

e avendo nel flusso di ingresso:

mamma, li Turchi!
5

il programma emette sul flusso di uscita

Testo inserito: mamma, li Turchi!
Testo cifrato: rfrrf, qn Yzwhmn!

Esempio 2

Eseguendo

./Soluzione D

e ricevendo da standard input

rfrrf, qn Yzwhmn!
5

il programma emette sul flusso di uscita

Testo inserito: rfrrf, qn Yzwhmn!
Testo decifrato: mamma, li Turchi!

Programma da correggere

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define N 100
 
char cifra( char c, int k );
 
int main( int argc, char *argv[] ) {
 
  int k, i = 0;
  char op = argv[0];
  char testo[N];
  char *modificato;
 
 
  while ( ( testo[i] = getchar() ) != '\n' ) {
    i++;
  }
 
  scanf( "%d", &);
  if ( op == 'D' )
    k = k * -1;
 
 
  i = 0;
  while ( testo[i]  != '\0' ) {
    modificato[i] = cifra( testo[i], k );
    i++;
  }
 
 
  printf ( "Testo inserito: %s\n", testo );
  if ( op == 'C')
    printf ( "Testo cifrato:" );
  else
    printf ( "Testo decifrato:");
  printf ( " %s\n", modificato );
 
  return 0;
 
}
 
 
char cifra( char c, int k) {
 
  if ( isalpha( c ) ) {
    for (int j=1; j<=k; j++) {
      if ( c != 'z' )
        c++;
      else
        c = 'a';
    }  
  }
 
  else return c;
}