PROBLEMA [C]Gets() o non gets()?

Pubblicità

Brasa

Utente Attivo
Messaggi
192
Reazioni
19
Punteggio
38
Ciao a tutti,
ho da poco iniziato a programmare in C cose molto semplici, che però talvolta nemmeno riescono. Il programma in questione dovrebbe criptare e decriptare files.txt. Elenco ciò che dovrebbe fare:
-Chiede l'inserimento di una password (OK)
-Visualizza un menù dove si sceglie se criptare, decriptare o uscire. (OK)
-Una volta effettuata la scelta chiede di inserire il nome del file di input e poi il nome del file output(OK, forse...)
-Crea l'output criptato (nel caso della prima scelta o viceversa) (Ok solo quando elimino il passo precedente e inserisco input e output predefiniti)
-Elimina il file non criptato e lascia quello criptato

Nello spoiler il programma:
Codice:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include <windows.h>
unsigned int sleep(unsigned int seconds);


int main(){


int a;
int status;
int OK = 0;
int passw = 20111911;
int passw1;
char name[80];
char name1[80];
password:
printf("\nCheck-in: ");
scanf("%d", &passw1);
if (passw1 == passw){
menu:
printf("\tChoose\n");
printf("1)Cript\n2)Decript\n3)Exit\n");
scanf("%d", &a);
if(a == 1){
fflush(stdin);
printf("\nEnter file name input (.txt only): ");
gets(name);
fflush(stdin);
printf("\nEnter file name output (.txt only): ");
gets(name1);
FILE *fp, *fb;
char Ch;
fp=fopen("name","r");
fb=fopen("name1","w+");
 while((Ch=fgetc(fp))!=EOF)
{
   switch(Ch)
          {
               case 'A': fprintf(fb, "i"); break;
               case 'B': fprintf(fb, "@"); break;
               case 'C': fprintf(fb, "I"); break;
               case 'D': fprintf(fb, ")"); break;
               case 'E': fprintf(fb, "z"); break;
               case 'F': fprintf(fb, "u"); break;
               case 'G': fprintf(fb, "#"); break;
               case 'H': fprintf(fb, "C"); break;
               case 'I': fprintf(fb, "|"); break;
               case 'J': fprintf(fb, "0"); break;
               case 'K': fprintf(fb, "("); break;
               case 'L': fprintf(fb, "!"); break;
               case 'M': fprintf(fb, "4"); break;
               case 'N': fprintf(fb, "&"); break;
               case 'O': fprintf(fb, "1"); break;
               case 'P': fprintf(fb, "Q"); break;
               case 'Q': fprintf(fb, "t"); break;
               case 'R': fprintf(fb, "8"); break;
               case 'S': fprintf(fb, "K"); break;
               case 'T': fprintf(fb, "2"); break;
               case 'U': fprintf(fb, "*"); break;
               case 'V': fprintf(fb, "<"); break;
               case 'W': fprintf(fb, ">"); break;
               case 'X': fprintf(fb, "_"); break;
               case 'Y': fprintf(fb, "-"); break;
               case 'Z': fprintf(fb, "]"); break;
               case ' ': fprintf(fb, ":"); break;
               case 'a': fprintf(fb, "9"); break;
               case 'b': fprintf(fb, "P"); break;
               case 'c': fprintf(fb, ";"); break;
               case 'd': fprintf(fb, "^"); break;
               case 'e': fprintf(fb, "."); break;
               case 'f': fprintf(fb, "T"); break;
               case 'g': fprintf(fb, " "); break;
               case 'h': fprintf(fb, "Z"); break;
               case 'i': fprintf(fb, "="); break;
               case 'j': fprintf(fb, "7"); break;
               case 'k': fprintf(fb, "F"); break;
               case 'l': fprintf(fb, "3"); break;
               case 'm': fprintf(fb, "Y"); break;
               case 'n': fprintf(fb, "/"); break;
               case 'o': fprintf(fb, "["); break;
               case 'p': fprintf(fb, "w"); break;
               case 'q': fprintf(fb, "H"); break;
               case 'r': fprintf(fb, "$"); break;
               case 's': fprintf(fb, "M"); break;
               case 't': fprintf(fb, "6"); break;
               case 'u': fprintf(fb, "N"); break;
               case 'v': fprintf(fb, "S"); break;
               case 'w': fprintf(fb, "+"); break;
               case 'x': fprintf(fb, "5"); break;
               case 'y': fprintf(fb, "?"); break;
               case 'z': fprintf(fb, "m"); break;
               case ':': fprintf(fb, "q"); break;
               case '.': fprintf(fb, "o"); break;
               case ',': fprintf(fb, "c"); break;
               case ';': fprintf(fb, "l"); break;
               case '-': fprintf(fb, "D"); break;
               case '(': fprintf(fb, "x"); break;
               case ')': fprintf(fb, "f"); break;
          }


}
fclose(fp);
fclose(fb);
char file[] = "name";
status = remove(file);
if(status == 0){
    printf("\nDone!");
}
else{
    printf("\nError! Cannot delete the file!");
    time_t ora;
    ora = time(NULL);
    FILE * fn;
    fn = fopen("dump.txt", "w+");
    fprintf(fn, "%s\nError 1:\nThe file %s cannot be deleted because it doesn't exist,\nit's opened or it's protected. ", asctime(localtime(&ora)), name);
    fclose(fn);
}
}
else if(a == 2){
fflush(stdin);
printf("\nEnter file name input (.txt only): ");
gets(name1);
fflush(stdin);
printf("\nEnter file name output (.txt only: ");
gets(name);
FILE *fp, *fb;
int Chv;
fb=fopen("name","w+");
fp=fopen("name1","r");
 while((Chv=fgetc(fp))!=EOF)
{
   switch(Chv)
          {
               case 'i': fprintf(fb, "A"); break;
               case '@': fprintf(fb, "B"); break;
               case 'I': fprintf(fb, "C"); break;
               case ')': fprintf(fb, "D"); break;
               case 'z': fprintf(fb, "E"); break;
               case 'u': fprintf(fb, "F"); break;
               case '#': fprintf(fb, "G"); break;
               case 'C': fprintf(fb, "H"); break;
               case '|': fprintf(fb, "I"); break;
               case '0': fprintf(fb, "J"); break;
               case '(': fprintf(fb, "K"); break;
               case '!': fprintf(fb, "L"); break;
               case '4': fprintf(fb, "M"); break;
               case '&': fprintf(fb, "N"); break;
               case '1': fprintf(fb, "O"); break;
               case 'Q': fprintf(fb, "P"); break;
               case 't': fprintf(fb, "Q"); break;
               case '8': fprintf(fb, "R"); break;
               case 'K': fprintf(fb, "S"); break;
               case '2': fprintf(fb, "T"); break;
               case '*': fprintf(fb, "U"); break;
               case '<': fprintf(fb, "V"); break;
               case '>': fprintf(fb, "W"); break;
               case '_': fprintf(fb, "X"); break;
               case '-': fprintf(fb, "Y"); break;
               case ']': fprintf(fb, "Z"); break;
               case ':': fprintf(fb, " "); break;
               case '9': fprintf(fb, "a"); break;
               case 'P': fprintf(fb, "b"); break;
               case ';': fprintf(fb, "c"); break;
               case '^': fprintf(fb, "d"); break;
               case '.': fprintf(fb, "e"); break;
               case 'T': fprintf(fb, "f"); break;
               case ' ': fprintf(fb, "g"); break;
               case 'Z': fprintf(fb, "h"); break;
               case '=': fprintf(fb, "i"); break;
               case '7': fprintf(fb, "j"); break;
               case 'F': fprintf(fb, "k"); break;
               case '3': fprintf(fb, "l"); break;
               case 'Y': fprintf(fb, "m"); break;
               case '/': fprintf(fb, "n"); break;
               case '[': fprintf(fb, "o"); break;
               case 'w': fprintf(fb, "p"); break;
               case 'H': fprintf(fb, "q"); break;
               case '$': fprintf(fb, "r"); break;
               case 'M': fprintf(fb, "s"); break;
               case '6': fprintf(fb, "t"); break;
               case 'N': fprintf(fb, "u"); break;
               case 'S': fprintf(fb, "v"); break;
               case '+': fprintf(fb, "w"); break;
               case '5': fprintf(fb, "x"); break;
               case '?': fprintf(fb, "y"); break;
               case 'm': fprintf(fb, "z"); break;
               case 'q': fprintf(fb, ":"); break;
               case 'o': fprintf(fb, "."); break;
               case 'c': fprintf(fb, ","); break;
               case 'l': fprintf(fb, ";"); break;
               case 'D': fprintf(fb, "-"); break;
               case 'x': fprintf(fb, "("); break;
               case 'f': fprintf(fb, ")"); break;
          }
}
fclose(fp);
fclose(fb);
char file[] = "name1";
status = remove(file);
if(status == 0){
    printf("\nDone!");
}
else{
    printf("\nError! Cannot delete the file!");
    time_t ora;
    ora = time(NULL);
    printf("%s", asctime(localtime(&ora)));
    FILE * fo;
    fo = fopen("dump.txt", "w+");
    fprintf(fo, "%s\nError 1:\nThe file %s cannot be deleted because it doesn't exist,\nit's opened or it's protected. ", asctime(localtime(&ora)), name1);
    fclose(fo);
}
}
else if(a == 3){
    return OK;
}
else{
        printf("\nInvalid input!\n");
goto menu;
}
}
else{
    printf("\nInvalid password!");
    goto password;
}
Sleep(3000);
return OK;
}

Vorrei che qualcuno mi illuminasse sul perchè quando aggiungo la parte di codice per inserire input e output dl file da criptare visualizza -Error! Cannot delete the file!- anche se il file input esiste. Sembra che nella parte in cui specifico -fopen("name", "r")- la parte -name- non viene sostituita dal nome inserito precedentemente. Potete aiutarmi?

P.S Pensavo di far corrispondere a ciascun carattere un numero di tre cifre, ma per decriptarlo come posso fare per far leggere tre numeri alla volta?
ES:
A = 123
B = 625

AB criptato sarebbe 123625

per decriptarlo come posso far leggere il numero spezzato in modo da poterlo trasformare nella parola originale? Con fscanf mi prende il numero per intero anche specificando %3d. :grat:

Probabilmente sbaglio tutto, quindi vi prego di avere pazienza con me :)



Grazie anticipatamente :party:

- - - Updated - - -

Risolto, avevo fatto un errore abbastanza stupido, nello spoiler il codice corretto ;)
Codice:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include <windows.h>
unsigned int sleep(unsigned int seconds);


int main(int argc,char ** argv){


int a;
int status;
int OK = 0;
int passw = 20111911;
int passw1;
char name[80];
char name1[80];
password:
printf("\nCheck-in: ");
scanf("%d", &passw1);
if (passw1 == passw){
menu:
printf("\tChoose\n");
printf("1)Cript\n2)Decript\n3)Exit\n");
scanf("%d", &a);
if(a == 1){
fflush(stdin);
printf("\nEnter file name input (.txt only): ");
gets(name);
fflush(stdin);
printf("\nEnter file name output (.txt only): ");
gets(name1);
FILE *fp, *fb;
char Ch;
fp=fopen(name,"r");     /*Avevo messo le virgolette "name", non dovevo metterle*/
fb=fopen(name1,"w+"); /*Idem alla riga precedente*/
 while((Ch=fgetc(fp))!=EOF)
{
   switch(Ch)
          {
               case 'A': fprintf(fb, "i"); break;
               case 'B': fprintf(fb, "@"); break;
               case 'C': fprintf(fb, "I"); break;
               case 'D': fprintf(fb, ")"); break;
               case 'E': fprintf(fb, "z"); break;
               case 'F': fprintf(fb, "u"); break;
               case 'G': fprintf(fb, "#"); break;
               case 'H': fprintf(fb, "C"); break;
               case 'I': fprintf(fb, "|"); break;
               case 'J': fprintf(fb, "0"); break;
               case 'K': fprintf(fb, "("); break;
               case 'L': fprintf(fb, "!"); break;
               case 'M': fprintf(fb, "4"); break;
               case 'N': fprintf(fb, "&"); break;
               case 'O': fprintf(fb, "1"); break;
               case 'P': fprintf(fb, "Q"); break;
               case 'Q': fprintf(fb, "t"); break;
               case 'R': fprintf(fb, "8"); break;
               case 'S': fprintf(fb, "K"); break;
               case 'T': fprintf(fb, "2"); break;
               case 'U': fprintf(fb, "*"); break;
               case 'V': fprintf(fb, "<"); break;
               case 'W': fprintf(fb, ">"); break;
               case 'X': fprintf(fb, "_"); break;
               case 'Y': fprintf(fb, "-"); break;
               case 'Z': fprintf(fb, "]"); break;
               case ' ': fprintf(fb, ":"); break;
               case 'a': fprintf(fb, "9"); break;
               case 'b': fprintf(fb, "P"); break;
               case 'c': fprintf(fb, ";"); break;
               case 'd': fprintf(fb, "^"); break;
               case 'e': fprintf(fb, "."); break;
               case 'f': fprintf(fb, "T"); break;
               case 'g': fprintf(fb, " "); break;
               case 'h': fprintf(fb, "Z"); break;
               case 'i': fprintf(fb, "="); break;
               case 'j': fprintf(fb, "7"); break;
               case 'k': fprintf(fb, "F"); break;
               case 'l': fprintf(fb, "3"); break;
               case 'm': fprintf(fb, "Y"); break;
               case 'n': fprintf(fb, "/"); break;
               case 'o': fprintf(fb, "["); break;
               case 'p': fprintf(fb, "w"); break;
               case 'q': fprintf(fb, "H"); break;
               case 'r': fprintf(fb, "$"); break;
               case 's': fprintf(fb, "M"); break;
               case 't': fprintf(fb, "6"); break;
               case 'u': fprintf(fb, "N"); break;
               case 'v': fprintf(fb, "S"); break;
               case 'w': fprintf(fb, "+"); break;
               case 'x': fprintf(fb, "5"); break;
               case 'y': fprintf(fb, "?"); break;
               case 'z': fprintf(fb, "m"); break;
               case ':': fprintf(fb, "q"); break;
               case '.': fprintf(fb, "o"); break;
               case ',': fprintf(fb, "c"); break;
               case ';': fprintf(fb, "l"); break;
               case '-': fprintf(fb, "D"); break;
               case '(': fprintf(fb, "x"); break;
               case ')': fprintf(fb, "f"); break;
          }


}
fclose(fp);
fclose(fb);
status = remove(name); /*Tolto un pezzo di codice inutile, corretto e ora funziona*/
if(status == 0){
    printf("\nDone!");
}
else{
    printf("\nError! Cannot delete the file!");
    time_t ora;
    ora = time(NULL);
    FILE * fn;
    fn = fopen("dump.txt", "w+");
    fprintf(fn, "%s\nError 1:\nThe file %s cannot be deleted because it doesn't exist,\nit's opened or it's protected. ", asctime(localtime(&ora)), name);
    fclose(fn);
}
}
else if(a == 2){
fflush(stdin);
printf("\nEnter file name input (.txt only): ");
gets(name1);
fflush(stdin);
printf("\nEnter file name output (.txt only): ");
gets(name);
FILE *fp, *fb;
int Chv;
fb=fopen(name,"w+"); /*Idem*/
fp=fopen(name1,"r"); /*Idem*/
 while((Chv=fgetc(fp))!=EOF)
{
   switch(Chv)
          {
               case 'i': fprintf(fb, "A"); break;
               case '@': fprintf(fb, "B"); break;
               case 'I': fprintf(fb, "C"); break;
               case ')': fprintf(fb, "D"); break;
               case 'z': fprintf(fb, "E"); break;
               case 'u': fprintf(fb, "F"); break;
               case '#': fprintf(fb, "G"); break;
               case 'C': fprintf(fb, "H"); break;
               case '|': fprintf(fb, "I"); break;
               case '0': fprintf(fb, "J"); break;
               case '(': fprintf(fb, "K"); break;
               case '!': fprintf(fb, "L"); break;
               case '4': fprintf(fb, "M"); break;
               case '&': fprintf(fb, "N"); break;
               case '1': fprintf(fb, "O"); break;
               case 'Q': fprintf(fb, "P"); break;
               case 't': fprintf(fb, "Q"); break;
               case '8': fprintf(fb, "R"); break;
               case 'K': fprintf(fb, "S"); break;
               case '2': fprintf(fb, "T"); break;
               case '*': fprintf(fb, "U"); break;
               case '<': fprintf(fb, "V"); break;
               case '>': fprintf(fb, "W"); break;
               case '_': fprintf(fb, "X"); break;
               case '-': fprintf(fb, "Y"); break;
               case ']': fprintf(fb, "Z"); break;
               case ':': fprintf(fb, " "); break;
               case '9': fprintf(fb, "a"); break;
               case 'P': fprintf(fb, "b"); break;
               case ';': fprintf(fb, "c"); break;
               case '^': fprintf(fb, "d"); break;
               case '.': fprintf(fb, "e"); break;
               case 'T': fprintf(fb, "f"); break;
               case ' ': fprintf(fb, "g"); break;
               case 'Z': fprintf(fb, "h"); break;
               case '=': fprintf(fb, "i"); break;
               case '7': fprintf(fb, "j"); break;
               case 'F': fprintf(fb, "k"); break;
               case '3': fprintf(fb, "l"); break;
               case 'Y': fprintf(fb, "m"); break;
               case '/': fprintf(fb, "n"); break;
               case '[': fprintf(fb, "o"); break;
               case 'w': fprintf(fb, "p"); break;
               case 'H': fprintf(fb, "q"); break;
               case '$': fprintf(fb, "r"); break;
               case 'M': fprintf(fb, "s"); break;
               case '6': fprintf(fb, "t"); break;
               case 'N': fprintf(fb, "u"); break;
               case 'S': fprintf(fb, "v"); break;
               case '+': fprintf(fb, "w"); break;
               case '5': fprintf(fb, "x"); break;
               case '?': fprintf(fb, "y"); break;
               case 'm': fprintf(fb, "z"); break;
               case 'q': fprintf(fb, ":"); break;
               case 'o': fprintf(fb, "."); break;
               case 'c': fprintf(fb, ","); break;
               case 'l': fprintf(fb, ";"); break;
               case 'D': fprintf(fb, "-"); break;
               case 'x': fprintf(fb, "("); break;
               case 'f': fprintf(fb, ")"); break;
          }
}
fclose(fp);
fclose(fb);
status = remove(name1); /*Anche qui tolto il pezzo inutile e corretta la restante parte*/
if(status == 0){
    printf("\nDone!");
}
else{
    printf("\nError! Cannot delete the file!");
    time_t ora;
    ora = time(NULL);
    FILE * fo;
    fo = fopen("dump.txt", "w+");
    fprintf(fo, "%s\nError 1:\nThe file %s cannot be deleted because it doesn't exist,\nit's opened or it's protected. ", asctime(localtime(&ora)), name1);
    fclose(fo);
}
}
else if(a == 3){
    return OK;
}
else{
        printf("\nInvalid input!\n");
goto menu;
}
}
else{
    printf("\nInvalid password!");
    goto password;
}
Sleep(3000);
return OK;
}

Alla prossima :vv:
 
Mah risolto...
Ti dico solo che gets è stata completamente rimossa in C11, già deprecata dal C89 (25 anni fa!). goto non andrebbe usato. La logica del programma, l'algoritmo di """"criptazione"""" sono poco sensati.
 
Mah risolto...
Ti dico solo che gets è stata completamente rimossa in C11, già deprecata dal C89 (25 anni fa!). goto non andrebbe usato. La logica del programma, l'algoritmo di """"criptazione"""" sono poco sensati.

Del resto sono qui per imparare, quindi se potessi darmi qualche consiglio te ne sarei grato. Avendo appena iniziato con il C gli aiuti sono sempre ben accetti :)

P.S.
Il programma é un esercizio.

- - - Updated - - -

Credo di aver capito ora, ma "goto" come lo evito?

- - - Updated - - -

per ora ho tolto gets, ma non so come eliminare i goto.
Codice:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include <windows.h>
unsigned int sleep(unsigned int seconds);


int main(){


int a, status, passw, passw1, passw2, passw3, passw4, OK = 0;
char name[80], name1[80];
password:
printf("\nCheck-in (default password 0000): ");
scanf("%d", &passw1);
FILE *fd;
fd = fopen("user.gpl", "r");
fscanf(fd, "%d", &passw);
fclose(fd);
if (passw1 == passw){
menu:
printf("\tChoose\n");
printf("1)Cript\n2)Decript\n3)Password configuration\n4)Guide\n5)Exit\n");
scanf("%d", &a);
if(a == 1){
fflush(stdin);
printf("\nEnter file name input (.txt only): ");
scanf("%s", &name);
fflush(stdin);
printf("\nEnter file name output (.txt only): ");
scanf("%s", &name1);
FILE *fp, *fb;
char Ch;
fp=fopen(name,"r");
fb=fopen(name1,"w+");
 while((Ch=fgetc(fp))!=EOF)
{
   switch(Ch)
          {
               case 'A': fprintf(fb, "i"); break;
               case 'B': fprintf(fb, "@"); break;
               case 'C': fprintf(fb, "I"); break;
               case 'D': fprintf(fb, ")"); break;
               case 'E': fprintf(fb, "z"); break;
               case 'F': fprintf(fb, "u"); break;
               case 'G': fprintf(fb, "#"); break;
               case 'H': fprintf(fb, "C"); break;
               case 'I': fprintf(fb, "|"); break;
               case 'J': fprintf(fb, "0"); break;
               case 'K': fprintf(fb, "("); break;
               case 'L': fprintf(fb, "!"); break;
               case 'M': fprintf(fb, "4"); break;
               case 'N': fprintf(fb, "&"); break;
               case 'O': fprintf(fb, "1"); break;
               case 'P': fprintf(fb, "Q"); break;
               case 'Q': fprintf(fb, "t"); break;
               case 'R': fprintf(fb, "8"); break;
               case 'S': fprintf(fb, "K"); break;
               case 'T': fprintf(fb, "2"); break;
               case 'U': fprintf(fb, "*"); break;
               case 'V': fprintf(fb, "<"); break;
               case 'W': fprintf(fb, ">"); break;
               case 'X': fprintf(fb, "_"); break;
               case 'Y': fprintf(fb, "-"); break;
               case 'Z': fprintf(fb, "]"); break;
               case ' ': fprintf(fb, ":"); break;
               case 'a': fprintf(fb, "9"); break;
               case 'b': fprintf(fb, "P"); break;
               case 'c': fprintf(fb, ";"); break;
               case 'd': fprintf(fb, "^"); break;
               case 'e': fprintf(fb, "."); break;
               case 'f': fprintf(fb, "T"); break;
               case 'g': fprintf(fb, " "); break;
               case 'h': fprintf(fb, "Z"); break;
               case 'i': fprintf(fb, "="); break;
               case 'j': fprintf(fb, "7"); break;
               case 'k': fprintf(fb, "F"); break;
               case 'l': fprintf(fb, "3"); break;
               case 'm': fprintf(fb, "Y"); break;
               case 'n': fprintf(fb, "/"); break;
               case 'o': fprintf(fb, "["); break;
               case 'p': fprintf(fb, "w"); break;
               case 'q': fprintf(fb, "H"); break;
               case 'r': fprintf(fb, "$"); break;
               case 's': fprintf(fb, "M"); break;
               case 't': fprintf(fb, "6"); break;
               case 'u': fprintf(fb, "N"); break;
               case 'v': fprintf(fb, "S"); break;
               case 'w': fprintf(fb, "+"); break;
               case 'x': fprintf(fb, "5"); break;
               case 'y': fprintf(fb, "?"); break;
               case 'z': fprintf(fb, "m"); break;
               case ':': fprintf(fb, "q"); break;
               case '.': fprintf(fb, "o"); break;
               case ',': fprintf(fb, "c"); break;
               case ';': fprintf(fb, "l"); break;
               case '-': fprintf(fb, "D"); break;
               case '(': fprintf(fb, "x"); break;
               case ')': fprintf(fb, "f"); break;
          }


}
fclose(fp);
fclose(fb);
status = remove(name);
if(status == 0){
    printf("\nDone!");
}
else{
    printf("\nError! Cannot delete the file!");
    time_t ora;
    ora = time(NULL);
    FILE * fn;
    fn = fopen("dump.txt", "w+");
    fprintf(fn, "%s\nError 1:\nThe file %s cannot be deleted because it doesn't exist,\nit's opened or it's protected. ", asctime(localtime(&ora)), name);
    fclose(fn);
}
}
else if(a == 2){
fflush(stdin);
printf("\nEnter file name input (.txt only): ");
scanf("%s", &name1);
fflush(stdin);
printf("\nEnter file name output (.txt only): ");
scanf("%s", &name);
FILE *fp, *fb;
int Chv;
fb=fopen(name,"w+");
fp=fopen(name1,"r");
 while((Chv=fgetc(fp))!=EOF)
{
   switch(Chv)
          {
               case 'i': fprintf(fb, "A"); break;
               case '@': fprintf(fb, "B"); break;
               case 'I': fprintf(fb, "C"); break;
               case ')': fprintf(fb, "D"); break;
               case 'z': fprintf(fb, "E"); break;
               case 'u': fprintf(fb, "F"); break;
               case '#': fprintf(fb, "G"); break;
               case 'C': fprintf(fb, "H"); break;
               case '|': fprintf(fb, "I"); break;
               case '0': fprintf(fb, "J"); break;
               case '(': fprintf(fb, "K"); break;
               case '!': fprintf(fb, "L"); break;
               case '4': fprintf(fb, "M"); break;
               case '&': fprintf(fb, "N"); break;
               case '1': fprintf(fb, "O"); break;
               case 'Q': fprintf(fb, "P"); break;
               case 't': fprintf(fb, "Q"); break;
               case '8': fprintf(fb, "R"); break;
               case 'K': fprintf(fb, "S"); break;
               case '2': fprintf(fb, "T"); break;
               case '*': fprintf(fb, "U"); break;
               case '<': fprintf(fb, "V"); break;
               case '>': fprintf(fb, "W"); break;
               case '_': fprintf(fb, "X"); break;
               case '-': fprintf(fb, "Y"); break;
               case ']': fprintf(fb, "Z"); break;
               case ':': fprintf(fb, " "); break;
               case '9': fprintf(fb, "a"); break;
               case 'P': fprintf(fb, "b"); break;
               case ';': fprintf(fb, "c"); break;
               case '^': fprintf(fb, "d"); break;
               case '.': fprintf(fb, "e"); break;
               case 'T': fprintf(fb, "f"); break;
               case ' ': fprintf(fb, "g"); break;
               case 'Z': fprintf(fb, "h"); break;
               case '=': fprintf(fb, "i"); break;
               case '7': fprintf(fb, "j"); break;
               case 'F': fprintf(fb, "k"); break;
               case '3': fprintf(fb, "l"); break;
               case 'Y': fprintf(fb, "m"); break;
               case '/': fprintf(fb, "n"); break;
               case '[': fprintf(fb, "o"); break;
               case 'w': fprintf(fb, "p"); break;
               case 'H': fprintf(fb, "q"); break;
               case '$': fprintf(fb, "r"); break;
               case 'M': fprintf(fb, "s"); break;
               case '6': fprintf(fb, "t"); break;
               case 'N': fprintf(fb, "u"); break;
               case 'S': fprintf(fb, "v"); break;
               case '+': fprintf(fb, "w"); break;
               case '5': fprintf(fb, "x"); break;
               case '?': fprintf(fb, "y"); break;
               case 'm': fprintf(fb, "z"); break;
               case 'q': fprintf(fb, ":"); break;
               case 'o': fprintf(fb, "."); break;
               case 'c': fprintf(fb, ","); break;
               case 'l': fprintf(fb, ";"); break;
               case 'D': fprintf(fb, "-"); break;
               case 'x': fprintf(fb, "("); break;
               case 'f': fprintf(fb, ")"); break;
          }
}
fclose(fp);
fclose(fb);
status = remove(name1);
if(status == 0){
    printf("\nDone!");
}
else{
    printf("\nError! Cannot delete the file!");
    time_t ora;
    ora = time(NULL);
    FILE * fo;
    fo = fopen("dump.txt", "w+");
    fprintf(fo, "%s\nError 1:\nThe file %s cannot be deleted because it doesn't exist,\nit's opened or it's protected. ", asctime(localtime(&ora)), name1);
    fclose(fo);
}
}
else if( a == 3){
    join:
    printf("\nCheck-in:  ");
    scanf("%d", &passw2);
    if(passw2 == passw){
        reload:
        printf("\nEnter new password: ");
        scanf("%d", &passw3);
        printf("\nRe-enter new password: ");
        scanf("%d", &passw4);
        if(passw3 == passw4){
                FILE * fn;
                fn = fopen("user.gpl", "w+");
                fprintf(fn, "%d", passw3);
                fclose(fn);
                printf("\nPassword successfully updated!");
       }
       else {
        printf("Passwords are not equal!");
        goto reload;
       }
    }
    else{
        printf("\nInvalid password!");
        goto join;
    }
}
else if(a == 4){
        printf("\n\tGuide");
        printf("\n1)Cript: the programm will ask you the name of the input (it have to exist) and the output that will be created or rewrited.\nNOTE: there are supported only .txt files, you have to write filename.txt!");
        printf("\n2)Decript: the programm will ask you the name of the input (it have to exist) and the output that will be created or rewrited.\nNOTE: there are supported only .txt files, you have to write filename.txt!");
        printf("\n3)Password configuration: it help you to change password, default it's 0000.\n");
        goto menu;


}
else if(a == 5){
    return OK;
}
else{
        printf("\nInvalid input!\n");
goto menu;
}
}
else{
    printf("\nInvalid password!");
    goto password;
}
Sleep(3000);
return OK;
}
 
Ultima modifica:
Il problema è che la quasi assente indentazione rende piuttosto impossibile la lettura del codice. Un if non si capisce dove inizi e dove finisca, per dirne una.
goto può essere quasi sempre sostituito da un'iterazione.
 
Il problema è che la quasi assente indentazione rende piuttosto impossibile la lettura del codice. Un if non si capisce dove inizi e dove finisca, per dirne una.
goto può essere quasi sempre sostituito da un'iterazione.

Si, all'inizio non pensavo di farlo vedere a qualuno al di fuori di me. Altrimenti avrei fatto in modo di renderlo comprensibile. Lo aggiusto un po e poi se vuoi mi aiuti ad aliminare i goto. :)

- - - Updated - - -

Più o meno... ecco:

Codice:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include <windows.h>
unsigned int sleep(unsigned int seconds);


int main(){


int a, status, passw, passw1, passw2, passw3, passw4, OK = 0;
char name[80], name1[80];


password:
    
  printf("\nCheck-in (default password 0000): ");
  scanf("%d", &passw1);
     
  FILE *fd;
  fd = fopen("user.gpl", "r");
  fscanf(fd, "%d", &passw);
  fclose(fd);
     
if (passw1 == passw){
   menu:
    printf("\tChoose\n");
    printf("1)Cript\n2)Decript\n3)Password configuration\n4)Guide\n5)Exit\n");
    scanf("%d", &a);
   
  if(a == 1){
       fflush(stdin);
       printf("\nEnter file name input (.txt only): ");
       scanf("%s", &name);
       
       fflush(stdin);
       printf("\nEnter file name output (.txt only): ");
       scanf("%s", &name1);
       
       FILE *fp, *fb;
       char Ch;
       fp=fopen(name,"r");
       fb=fopen(name1,"w+");
          
          while((Ch=fgetc(fp))!=EOF){
             switch(Ch){
               case 'A': fprintf(fb, "i"); break;
               case 'B': fprintf(fb, "@"); break;
               case 'C': fprintf(fb, "I"); break;
               case 'D': fprintf(fb, ")"); break;
               case 'E': fprintf(fb, "z"); break;
               case 'F': fprintf(fb, "u"); break;
               case 'G': fprintf(fb, "#"); break;
               case 'H': fprintf(fb, "C"); break;
               case 'I': fprintf(fb, "|"); break;
               case 'J': fprintf(fb, "0"); break;
               case 'K': fprintf(fb, "("); break;
               case 'L': fprintf(fb, "!"); break;
               case 'M': fprintf(fb, "4"); break;
               case 'N': fprintf(fb, "&"); break;
               case 'O': fprintf(fb, "1"); break;
               case 'P': fprintf(fb, "Q"); break;
               case 'Q': fprintf(fb, "t"); break;
               case 'R': fprintf(fb, "8"); break;
               case 'S': fprintf(fb, "K"); break;
               case 'T': fprintf(fb, "2"); break;
               case 'U': fprintf(fb, "*"); break;
               case 'V': fprintf(fb, "<"); break;
               case 'W': fprintf(fb, ">"); break;
               case 'X': fprintf(fb, "_"); break;
               case 'Y': fprintf(fb, "-"); break;
               case 'Z': fprintf(fb, "]"); break;
               case ' ': fprintf(fb, ":"); break;
               case 'a': fprintf(fb, "9"); break;
               case 'b': fprintf(fb, "P"); break;
               case 'c': fprintf(fb, ";"); break;
               case 'd': fprintf(fb, "^"); break;
               case 'e': fprintf(fb, "."); break;
               case 'f': fprintf(fb, "T"); break;
               case 'g': fprintf(fb, " "); break;
               case 'h': fprintf(fb, "Z"); break;
               case 'i': fprintf(fb, "="); break;
               case 'j': fprintf(fb, "7"); break;
               case 'k': fprintf(fb, "F"); break;
               case 'l': fprintf(fb, "3"); break;
               case 'm': fprintf(fb, "Y"); break;
               case 'n': fprintf(fb, "/"); break;
               case 'o': fprintf(fb, "["); break;
               case 'p': fprintf(fb, "w"); break;
               case 'q': fprintf(fb, "H"); break;
               case 'r': fprintf(fb, "$"); break;
               case 's': fprintf(fb, "M"); break;
               case 't': fprintf(fb, "6"); break;
               case 'u': fprintf(fb, "N"); break;
               case 'v': fprintf(fb, "S"); break;
               case 'w': fprintf(fb, "+"); break;
               case 'x': fprintf(fb, "5"); break;
               case 'y': fprintf(fb, "?"); break;
               case 'z': fprintf(fb, "m"); break;
               case ':': fprintf(fb, "q"); break;
               case '.': fprintf(fb, "o"); break;
               case ',': fprintf(fb, "c"); break;
               case ';': fprintf(fb, "l"); break;
               case '-': fprintf(fb, "D"); break;
               case '(': fprintf(fb, "x"); break;
               case ')': fprintf(fb, "f"); break;
             }
            }
            
     fclose(fp);
     fclose(fb);
     
     status = remove(name);
          if(status == 0){
            printf("\nDone!");
         }
          
          else{
            printf("\nError! Cannot delete the file!");
            
            time_t ora;
            ora = time(NULL);
            
            FILE * fn;
            fn = fopen("dump.txt", "w+");
            fprintf(fn, "%s\nError 1:\nThe file %s cannot be deleted because it doesn't exist,\nit's opened or it's protected. ", asctime(localtime(&ora)), name);
            fclose(fn);
          }
     } /*Chiude l'if della scelta 1*/
     
  else if(a == 2){
      fflush(stdin);
      printf("\nEnter file name input (.txt only): ");
      scanf("%s", &name1);
      
      fflush(stdin);
      printf("\nEnter file name output (.txt only): ");
      scanf("%s", &name);
      
      FILE *fp, *fb;
      int Chv;
      fb=fopen(name,"w+");
      fp=fopen(name1,"r");
      
             while((Chv=fgetc(fp))!=EOF){
                 switch(Chv){
               case 'i': fprintf(fb, "A"); break;
               case '@': fprintf(fb, "B"); break;
               case 'I': fprintf(fb, "C"); break;
               case ')': fprintf(fb, "D"); break;
               case 'z': fprintf(fb, "E"); break;
               case 'u': fprintf(fb, "F"); break;
               case '#': fprintf(fb, "G"); break;
               case 'C': fprintf(fb, "H"); break;
               case '|': fprintf(fb, "I"); break;
               case '0': fprintf(fb, "J"); break;
               case '(': fprintf(fb, "K"); break;
               case '!': fprintf(fb, "L"); break;
               case '4': fprintf(fb, "M"); break;
               case '&': fprintf(fb, "N"); break;
               case '1': fprintf(fb, "O"); break;
               case 'Q': fprintf(fb, "P"); break;
               case 't': fprintf(fb, "Q"); break;
               case '8': fprintf(fb, "R"); break;
               case 'K': fprintf(fb, "S"); break;
               case '2': fprintf(fb, "T"); break;
               case '*': fprintf(fb, "U"); break;
               case '<': fprintf(fb, "V"); break;
               case '>': fprintf(fb, "W"); break;
               case '_': fprintf(fb, "X"); break;
               case '-': fprintf(fb, "Y"); break;
               case ']': fprintf(fb, "Z"); break;
               case ':': fprintf(fb, " "); break;
               case '9': fprintf(fb, "a"); break;
               case 'P': fprintf(fb, "b"); break;
               case ';': fprintf(fb, "c"); break;
               case '^': fprintf(fb, "d"); break;
               case '.': fprintf(fb, "e"); break;
               case 'T': fprintf(fb, "f"); break;
               case ' ': fprintf(fb, "g"); break;
               case 'Z': fprintf(fb, "h"); break;
               case '=': fprintf(fb, "i"); break;
               case '7': fprintf(fb, "j"); break;
               case 'F': fprintf(fb, "k"); break;
               case '3': fprintf(fb, "l"); break;
               case 'Y': fprintf(fb, "m"); break;
               case '/': fprintf(fb, "n"); break;
               case '[': fprintf(fb, "o"); break;
               case 'w': fprintf(fb, "p"); break;
               case 'H': fprintf(fb, "q"); break;
               case '$': fprintf(fb, "r"); break;
               case 'M': fprintf(fb, "s"); break;
               case '6': fprintf(fb, "t"); break;
               case 'N': fprintf(fb, "u"); break;
               case 'S': fprintf(fb, "v"); break;
               case '+': fprintf(fb, "w"); break;
               case '5': fprintf(fb, "x"); break;
               case '?': fprintf(fb, "y"); break;
               case 'm': fprintf(fb, "z"); break;
               case 'q': fprintf(fb, ":"); break;
               case 'o': fprintf(fb, "."); break;
               case 'c': fprintf(fb, ","); break;
               case 'l': fprintf(fb, ";"); break;
               case 'D': fprintf(fb, "-"); break;
               case 'x': fprintf(fb, "("); break;
               case 'f': fprintf(fb, ")"); break;
              }
            }


         fclose(fp);
         fclose(fb);
         
         status = remove(name1);
         if(status == 0){
          printf("\nDone!");
         }
         
         else{
          printf("\nError! Cannot delete the file!");
        
          time_t ora;
          ora = time(NULL);
          FILE * fo;
          fo = fopen("dump.txt", "w+");
          fprintf(fo, "%s\nError 1:\nThe file %s cannot be deleted because it doesn't exist,\nit's opened or it's protected. ", asctime(localtime(&ora)), name1);
          fclose(fo);
         }
        }
        
  else if( a == 3){
    join:
      printf("\nCheck-in:  ");
      scanf("%d", &passw2);
      
     if(passw2 == passw){
         reload:
           printf("\nEnter new password: ");
           scanf("%d", &passw3);
           
           printf("\nRe-enter new password: ");
           scanf("%d", &passw4);
           
         if(passw3 == passw4){
                FILE * fn;
                fn = fopen("user.gpl", "w+");
                fprintf(fn, "%d", passw3);
                fclose(fn);
                printf("\nPassword successfully updated!");
         } 
       
         else {
          printf("Passwords are not equal!");
          goto reload;
         }
      }
    
    else{
        printf("\nInvalid password!");
        goto join;
    }
  }
 
  else if(a == 4){
        printf("\n\tGuide");
        printf("\n1)Cript: the programm will ask you the name of the input (it have to exist) and the output that will be created or rewrited.\nNOTE: there are supported only .txt files, you have to write filename.txt!");
        printf("\n2)Decript: the programm will ask you the name of the input (it have to exist) and the output that will be created or rewrited.\nNOTE: there are supported only .txt files, you have to write filename.txt!");
        printf("\n3)Password configuration: it help you to change password, default it's 0000.\n");
        goto menu;
  }


  else if(a == 5){
    return OK;
  }
 
  else{
    printf("\nInvalid input!\n");
    goto menu;
  }
} /*Chiude l'if iniziale*/


else{
    printf("\nInvalid password!");
    goto password;
}




Sleep(3000);
return OK;
}
 
1) fflush(stdin) ha un comportamento indefinito. La tua fonte di studi andrebbe rivalutata.
C11 draft 1570 ha detto:
7.21.5.2 The fflush function

If stream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined.
If stream is a null pointer, the fflush function performs this flushing action on all
streams for which the behavior is defined above.
Cerca su google o nel forum per ovviare e/o maggiori informazioni.
2)Quegli swtich sono insani: decisamente una lookup table.
3) Qual'è l'utilità di "OK"? Se vuoi proprio esplicitare il valore d'uscita, usa le macro EXIT_SUCCESS e EXIT_FAILURE, definite in stdlib.h
4) fopen non è infallibile. Devi controllare che il file sia stato effettivamente creato (ptr != NULL).
5) scanf("%s", &stringa) è sbagliato: stai passando l'indirizzo della stringa, non la stringa (che è già un array).
6)Se sai che una o più variabili verranno utilizzate in più blocchi condizionali, perché dichiararle in questi ultimi piuttosto che prima della struttura condizionale stessa? (mi riferisco a fp e fb)
7)Usa le funzioni!
8)Sono richiesti file .txt, ma non c'è nessun controllo a riguardo. Puoi o leggere il nome ed aggiungere .txt alla fine oppure effettuare un controllo dopo la lettura.
9)I goto possono essere sostituiti da while/do-while.
10)I messaggi di errore andrebbero scritti su stderr.

L'inglese, se posso permettermi:
- Dovrebbe essere: Enter input file name, non Enter file name input (anche per l'output)
-
it have to exist: semmai it has to exist. Ma io userei must o shall.
-
there are supported only .txt files significa "ci sono supportati solo .txt files". Dovrebbe essere: "Only .txt files are supported." o ".txt files are the only ones supported.", ma preferirei la prima.
 
Ultima modifica:
1) fflush(stdin) ha un comportamento indefinito. La tua fonte di studi andrebbe rivalutata.

Cerca su google o nel forum per ovviare e/o maggiori informazioni.
2)Quegli swtich sono insani: decisamente una lookup table.
3) Qual'è l'utilità di "OK"? Se vuoi proprio esplicitare il valore d'uscita, usa le macro EXIT_SUCCESS e EXIT_FAILURE, definite in stdlib.h
4) fopen non è infallibile. Devi controllare che il file sia stato effettivamente creato (ptr != NULL).
5) scanf("%s", &stringa) è sbagliato: stai passando l'indirizzo della stringa, non la stringa (che è già un array).
6)Se sai che una o più variabili verranno utilizzate in più blocchi condizionali, perché dichiararle in questi ultimi piuttosto che prima della struttura condizionale stessa? (mi riferisco a fp e fb)
7)Usa le funzioni!
8)Sono richiesti file .txt, ma non c'è nessun controllo a riguardo. Puoi o leggere il nome ed aggiungere .txt alla fine oppure effettuare un controllo dopo la lettura.
9)I goto possono essere sostituiti da while/do-while.
10)I messaggi di errore andrebbero scritti su stderr.

L'inglese, se posso permettermi:
- Dovrebbe essere: Enter input file name, non Enter file name input (anche per l'output)
-
it have to exist: semmai it has to exist. Ma io userei must o shall.
-
there are supported only .txt files significa "ci sono supportati solo .txt files". Dovrebbe essere: "Only .txt files are supported." o ".txt files are the only ones supported.", ma preferirei la prima.

fflush(stdin) l ho inserita perche con gets() mi andava a capo automaticamente, ora posso anche toglierlo é vero.Per l inglese immaginavo fosse tutto sbagliato, non ci ho prestato molta attenzione, prima risolvo i problemi più importanti.
Per il resto vedo che riesco a fare... Immagino poco.

- - - Updated - - -

2-4-5-7-10 mi sono poco chiari, se puoi farmi degli esempi... Il resto non che l abbia capito alla grande ma perlomeno so da dove cominciare.

- - - Updated - - -

se rimuovo fflush(stdin) succede questo:

Enter input file name (.txt only):
Enter output file name (.txt only): _

se invece di %s metto %c mi da sempre: Error! Unable to delete the file!

Ora sto così:
Codice:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include <windows.h>
unsigned int sleep(unsigned int seconds);


int main(){


int a, status, passw, passw1, passw2, passw3, passw4;
char name[80], name1[80];
FILE *fp, *fb;


password:


  printf("\nCheck-in (default password 0000): ");
  scanf("%d", &passw1);


  FILE *fd;
  fd = fopen("user.gpl", "r");
  fscanf(fd, "%d", &passw);
  fclose(fd);


if (passw1 == passw){
   menu:
    printf("\tChoose\n");
    printf("1)Cript\n2)Decript\n3)Password configuration\n4)Guide\n5)Exit\n");
    scanf("%d", &a);


  if(a == 1){
        fflush(stdin);
       printf("\nEnter input file name (.txt only): ");
       scanf("%s", &name);
        fflush(stdin);
       printf("\nEnter output file name (.txt only): ");
       scanf("%s", &name1);


       char Ch;
       fp=fopen(name,"r");
       fb=fopen(name1,"w+");


          while((Ch=fgetc(fp))!=EOF){
             switch(Ch){
               case 'A': fprintf(fb, "i"); break;
               case 'B': fprintf(fb, "@"); break;
               case 'C': fprintf(fb, "I"); break;
               case 'D': fprintf(fb, ")"); break;
               case 'E': fprintf(fb, "z"); break;
               case 'F': fprintf(fb, "u"); break;
               case 'G': fprintf(fb, "#"); break;
               case 'H': fprintf(fb, "C"); break;
               case 'I': fprintf(fb, "|"); break;
               case 'J': fprintf(fb, "0"); break;
               case 'K': fprintf(fb, "("); break;
               case 'L': fprintf(fb, "!"); break;
               case 'M': fprintf(fb, "4"); break;
               case 'N': fprintf(fb, "&"); break;
               case 'O': fprintf(fb, "1"); break;
               case 'P': fprintf(fb, "Q"); break;
               case 'Q': fprintf(fb, "t"); break;
               case 'R': fprintf(fb, "8"); break;
               case 'S': fprintf(fb, "K"); break;
               case 'T': fprintf(fb, "2"); break;
               case 'U': fprintf(fb, "*"); break;
               case 'V': fprintf(fb, "<"); break;
               case 'W': fprintf(fb, ">"); break;
               case 'X': fprintf(fb, "_"); break;
               case 'Y': fprintf(fb, "-"); break;
               case 'Z': fprintf(fb, "]"); break;
               case ' ': fprintf(fb, ":"); break;
               case 'a': fprintf(fb, "9"); break;
               case 'b': fprintf(fb, "P"); break;
               case 'c': fprintf(fb, ";"); break;
               case 'd': fprintf(fb, "^"); break;
               case 'e': fprintf(fb, "."); break;
               case 'f': fprintf(fb, "T"); break;
               case 'g': fprintf(fb, " "); break;
               case 'h': fprintf(fb, "Z"); break;
               case 'i': fprintf(fb, "="); break;
               case 'j': fprintf(fb, "7"); break;
               case 'k': fprintf(fb, "F"); break;
               case 'l': fprintf(fb, "3"); break;
               case 'm': fprintf(fb, "Y"); break;
               case 'n': fprintf(fb, "/"); break;
               case 'o': fprintf(fb, "["); break;
               case 'p': fprintf(fb, "w"); break;
               case 'q': fprintf(fb, "H"); break;
               case 'r': fprintf(fb, "$"); break;
               case 's': fprintf(fb, "M"); break;
               case 't': fprintf(fb, "6"); break;
               case 'u': fprintf(fb, "N"); break;
               case 'v': fprintf(fb, "S"); break;
               case 'w': fprintf(fb, "+"); break;
               case 'x': fprintf(fb, "5"); break;
               case 'y': fprintf(fb, "?"); break;
               case 'z': fprintf(fb, "m"); break;
               case ':': fprintf(fb, "q"); break;
               case '.': fprintf(fb, "o"); break;
               case ',': fprintf(fb, "c"); break;
               case ';': fprintf(fb, "l"); break;
               case '-': fprintf(fb, "D"); break;
               case '(': fprintf(fb, "x"); break;
               case ')': fprintf(fb, "f"); break;
             }
            }


     fclose(fp);
     fclose(fb);


     status = remove(name);
          if(status == 0){
            printf("\nDone!");
         }


          else{
            printf("\nError! Unable to delete the file!\n\n");
            time_t ora;
            ora = time(NULL);
            fprintf(stderr, "%s\nError 1:\nThe file %c cannot be deleted because it doesn't exist,\nit's opened or it's protected. ", asctime(localtime(&ora)), name);
          }
     } /*Chiude l'if della scelta 1*/


  else if(a == 2){
        fflush(stdin);
      printf("\nEnter input file name (.txt only): ");
      scanf("%s", &name1);
        fflush(stdin);
      printf("\nEnter output file name (.txt only): ");
      scanf("%s", &name);


      int Chv;
      fb=fopen(name,"w+");
      fp=fopen(name1,"r");


             while((Chv=fgetc(fp))!=EOF){
                 switch(Chv){
               case 'i': fprintf(fb, "A"); break;
               case '@': fprintf(fb, "B"); break;
               case 'I': fprintf(fb, "C"); break;
               case ')': fprintf(fb, "D"); break;
               case 'z': fprintf(fb, "E"); break;
               case 'u': fprintf(fb, "F"); break;
               case '#': fprintf(fb, "G"); break;
               case 'C': fprintf(fb, "H"); break;
               case '|': fprintf(fb, "I"); break;
               case '0': fprintf(fb, "J"); break;
               case '(': fprintf(fb, "K"); break;
               case '!': fprintf(fb, "L"); break;
               case '4': fprintf(fb, "M"); break;
               case '&': fprintf(fb, "N"); break;
               case '1': fprintf(fb, "O"); break;
               case 'Q': fprintf(fb, "P"); break;
               case 't': fprintf(fb, "Q"); break;
               case '8': fprintf(fb, "R"); break;
               case 'K': fprintf(fb, "S"); break;
               case '2': fprintf(fb, "T"); break;
               case '*': fprintf(fb, "U"); break;
               case '<': fprintf(fb, "V"); break;
               case '>': fprintf(fb, "W"); break;
               case '_': fprintf(fb, "X"); break;
               case '-': fprintf(fb, "Y"); break;
               case ']': fprintf(fb, "Z"); break;
               case ':': fprintf(fb, " "); break;
               case '9': fprintf(fb, "a"); break;
               case 'P': fprintf(fb, "b"); break;
               case ';': fprintf(fb, "c"); break;
               case '^': fprintf(fb, "d"); break;
               case '.': fprintf(fb, "e"); break;
               case 'T': fprintf(fb, "f"); break;
               case ' ': fprintf(fb, "g"); break;
               case 'Z': fprintf(fb, "h"); break;
               case '=': fprintf(fb, "i"); break;
               case '7': fprintf(fb, "j"); break;
               case 'F': fprintf(fb, "k"); break;
               case '3': fprintf(fb, "l"); break;
               case 'Y': fprintf(fb, "m"); break;
               case '/': fprintf(fb, "n"); break;
               case '[': fprintf(fb, "o"); break;
               case 'w': fprintf(fb, "p"); break;
               case 'H': fprintf(fb, "q"); break;
               case '$': fprintf(fb, "r"); break;
               case 'M': fprintf(fb, "s"); break;
               case '6': fprintf(fb, "t"); break;
               case 'N': fprintf(fb, "u"); break;
               case 'S': fprintf(fb, "v"); break;
               case '+': fprintf(fb, "w"); break;
               case '5': fprintf(fb, "x"); break;
               case '?': fprintf(fb, "y"); break;
               case 'm': fprintf(fb, "z"); break;
               case 'q': fprintf(fb, ":"); break;
               case 'o': fprintf(fb, "."); break;
               case 'c': fprintf(fb, ","); break;
               case 'l': fprintf(fb, ";"); break;
               case 'D': fprintf(fb, "-"); break;
               case 'x': fprintf(fb, "("); break;
               case 'f': fprintf(fb, ")"); break;
              }
            }


         fclose(fp);
         fclose(fb);


         status = remove(name1);
         if(status == 0){
          printf("\nDone!");
         }


         else{
          printf("\nError! Unable to delete the file!\n\n");
          time_t ora;
          ora = time(NULL);
          fprintf(stderr, "%s\nError 1:\nThe file %s cannot be deleted because it doesn't exist,\nit's opened or it's protected. ", asctime(localtime(&ora)), name1);
         }
        }


  else if( a == 3){
    join:
      printf("\nCheck-in:  ");
      scanf("%d", &passw2);


     if(passw2 == passw){
         reload:
           printf("\nEnter new password: ");
           scanf("%d", &passw3);


           printf("\nRe-enter new password: ");
           scanf("%d", &passw4);


         if(passw3 == passw4){
                FILE * fn;
                fn = fopen("user.gpl", "w+");
                fprintf(fn, "%d", passw3);
                fclose(fn);
                printf("\nPassword successfully updated!");
         }


         else {
          printf("Passwords are not equal!");
          goto reload;
         }
      }


    else{
        printf("\nInvalid password!");
        goto join;
    }
  }


  else if(a == 4){
        printf("\n\tGuide");
        printf("\n1)Cript: the programm will ask you the name of the input (it must exist) and the output that will be created or rewrited.\nNOTE: only .txt files are supported, you have to write filename.txt!");
        printf("\n2)Decript: the programm will ask you the name of the input (it must exist) and the output that will be created or rewrited.\nNOTE: only .txt files are supported, you have to write filename.txt!");
        printf("\n3)Password configuration: it help you to change password, default it's 0000.\n");
        goto menu;
  }


  else if(a == 5){
    return EXIT_SUCCESS;
  }


  else{
    printf("\nInvalid input!\n");
    goto menu;
  }
} /*Chiude l'if iniziale*/


else{
    printf("\nInvalid password!");
    goto password;
}




Sleep(3000);
return EXIT_SUCCESS;
}
 
Ultima modifica:
Cosa non hai capito nello specifico? Avrò piacere ad usare lmgtfy:sbav:

:D Dici che gli switch sono delle lock-up table, quindi? Che faccio?
Devo usare le funzioni... ?????
%s é errato, che ci metto??
Come sostituisco goto con while??
Se fopen non é infallibile, dovrei inserire una parte di codice che verifica se ha creato il file. E nel caso questo non avvenga? Che gli faccio fare?
La situazione dei .txt invece? So che volendo potrebbe usare per l input e l output anche altre estensioni... Mi pare di aver capito che devo far controllare al programma che io abbia inserito effettivamente un .txt giusto?Come?

Ora probabilmente starai pensando:"Ma questo non c ha capito una mazza!", beh putroppo é così :D Il tuo aiuto é di fondamentale importanza, ti ringrazio per il tempo che dedichi a uno cocciuto come me :)
 
Il tuo aiuto é di fondamentale importanza, ti ringrazio per il tempo che dedichi a uno cocciuto come me :)
Tip: google ha sempre la risposta pronta! I tuoi sono problemi molto comuni, affrontati ed affrontati: una ricerca (in inglese possibilmente) farà spuntare risposte come funghi...
Se non capisci qualcosa, vieni qui e vediamo di spiegartela.
NB: Non è che non voglia aiutarti, ma si tratta di questioni discusse un'infinità di volte
 
Tip: google ha sempre la risposta pronta! I tuoi sono problemi molto comuni, affrontati ed affrontati: una ricerca (in inglese possibilmente) farà spuntare risposte come funghi...
Se non capisci qualcosa, vieni qui e vediamo di spiegartela.
NB: Non è che non voglia aiutarti, ma si tratta di questioni discusse un'infinità di volte

Sisi avevo capito quello che intendevi.
Vedi, il vero problema é che quello che hai visto all inizio era giá frutto per il 50% di google. Tu mi avevi consigliato di rivedere le mie fonti... Comunque qualcosa me la sono guardata su wiki, e le idee un po più chiare ce le ho. Intanto grazie, stasera mi leggo tutto google e poi se non ho qualcosa chiaro mi ritrovi qui a rompere :)
Grazie 1000, alla prossima!

- - - Updated - - -

Ho appena avuto un illuminazione sul goto, ho capito ora. Non ho nemmeno bisogno di google :D

- - - Updated - - -

do{
printf("\nCheck-in (default password 0000): ");
scanf("%d", &passw1);
}
while (passw1 != passw);


Ho risolto il misero più grande dell'universo :D
 
Ho rattoppato qua e la, e ho dovuto fare molte ripetizioni (di codice eh! :vv:) per eliminare tutti i goto. Non trovo modo di sostituire %s in scanf. Ho eliminato fflush(stdin) e ho aggiunto qualche controllo... Ora (sempre se il resto va bene) dovrei risolvere questi 2 problemi:
-devo sostituire scanf("%s", &blablabla)
-devo far controllare al programma che l'utente abbia inserito effettivamente dei files.txt

Codice:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include <windows.h>


unsigned int sleep(unsigned int seconds);


int main(){


int a, stats, passw, passw1, passw2, passw3, passw4;
char name[80], name1[80];
FILE *fp, *fb, *fd, *fn;


  fd = fopen("user.gpl", "r");
  fscanf(fd, "%d", &passw);
  fclose(fd);


  printf("\nCheck-in (default password 0000): ");
  stats = scanf("%d", &passw1);
  if (stats == 0){
  fprintf(stderr, "\n\n\nThe password cannot contain characters, please restart the program!");
  Sleep(3000);
  return EXIT_FAILURE;
  }


while (passw1 != passw){
  printf("\nInvalid password!");
  printf("\nCheck-in (default password 0000): ");
  stats = scanf("%d", &passw1);


    if (stats == 0){
    fprintf(stderr, "\n\n\nThe password cannot contain characters, please restart the program!");
    Sleep(3000);
    return EXIT_FAILURE;
  }
}


    printf("\tChoose\n");
    printf("1)Cript\n2)Decript\n3)Password configuration\n4)Guide\n5)Exit\n");
    stats = scanf("%d", &a);


    if (stats == 0){
        fprintf(stderr, "\n\n\nThe choose cannot be a character!");
        Sleep(3000);
        return EXIT_FAILURE;
     }


    while ( a != 1 && a != 2 && a != 3 && a != 4 && a != 5){
    printf("Invalid input!\n");
    stats = scanf("%d", &a);


    if (stats == 0){
       fprintf(stderr, "\n\n\nThe choose cannot be a character!");
       Sleep(3000);
       return EXIT_FAILURE;
     }
    }


  if(a == 1){


       printf("\nEnter input file name (.txt only): ");
       scanf("%s", &name);


       printf("\nEnter output file name (.txt only): ");
       scanf("%s", &name1);


       char Ch;


       fp=fopen(name,"r");
       fb=fopen(name1,"w+");


        if (fb == NULL || fp == NULL){
        fprintf(stderr, "\n\n\nError while the program was opening the files!");
        fclose(fp);
        fclose(fb);
        remove(name1);
        Sleep(3000);
        return EXIT_FAILURE;
       }


          while((Ch=fgetc(fp))!=EOF){
             switch(Ch){
               case 'A': fprintf(fb, "i"); break;
               case 'B': fprintf(fb, "@"); break;
               case 'C': fprintf(fb, "I"); break;
               case 'D': fprintf(fb, ")"); break;
               case 'E': fprintf(fb, "z"); break;
               case 'F': fprintf(fb, "u"); break;
               case 'G': fprintf(fb, "#"); break;
               case 'H': fprintf(fb, "C"); break;
               case 'I': fprintf(fb, "|"); break;
               case 'J': fprintf(fb, "0"); break;
               case 'K': fprintf(fb, "("); break;
               case 'L': fprintf(fb, "!"); break;
               case 'M': fprintf(fb, "4"); break;
               case 'N': fprintf(fb, "&"); break;
               case 'O': fprintf(fb, "1"); break;
               case 'P': fprintf(fb, "Q"); break;
               case 'Q': fprintf(fb, "t"); break;
               case 'R': fprintf(fb, "8"); break;
               case 'S': fprintf(fb, "K"); break;
               case 'T': fprintf(fb, "2"); break;
               case 'U': fprintf(fb, "*"); break;
               case 'V': fprintf(fb, "<"); break;
               case 'W': fprintf(fb, ">"); break;
               case 'X': fprintf(fb, "_"); break;
               case 'Y': fprintf(fb, "-"); break;
               case 'Z': fprintf(fb, "]"); break;
               case ' ': fprintf(fb, ":"); break;
               case 'a': fprintf(fb, "9"); break;
               case 'b': fprintf(fb, "P"); break;
               case 'c': fprintf(fb, ";"); break;
               case 'd': fprintf(fb, "^"); break;
               case 'e': fprintf(fb, "."); break;
               case 'f': fprintf(fb, "T"); break;
               case 'g': fprintf(fb, " "); break;
               case 'h': fprintf(fb, "Z"); break;
               case 'i': fprintf(fb, "="); break;
               case 'j': fprintf(fb, "7"); break;
               case 'k': fprintf(fb, "F"); break;
               case 'l': fprintf(fb, "3"); break;
               case 'm': fprintf(fb, "Y"); break;
               case 'n': fprintf(fb, "/"); break;
               case 'o': fprintf(fb, "["); break;
               case 'p': fprintf(fb, "w"); break;
               case 'q': fprintf(fb, "H"); break;
               case 'r': fprintf(fb, "$"); break;
               case 's': fprintf(fb, "M"); break;
               case 't': fprintf(fb, "6"); break;
               case 'u': fprintf(fb, "N"); break;
               case 'v': fprintf(fb, "S"); break;
               case 'w': fprintf(fb, "+"); break;
               case 'x': fprintf(fb, "5"); break;
               case 'y': fprintf(fb, "?"); break;
               case 'z': fprintf(fb, "m"); break;
               case ':': fprintf(fb, "q"); break;
               case '.': fprintf(fb, "o"); break;
               case ',': fprintf(fb, "c"); break;
               case ';': fprintf(fb, "l"); break;
               case '-': fprintf(fb, "D"); break;
               case '(': fprintf(fb, "x"); break;
               case ')': fprintf(fb, "f"); break;
               case '\n':fprintf(fb, "O"); break;
             }
            }


     fclose(fp);
     fclose(fb);


     stats = remove(name);
          if(stats == 0){
            printf("\nDone!");
         }


          else{
            printf("\nError! Unable to delete the file!\n\n");
            time_t ora;
            ora = time(NULL);
            fprintf(stderr, "%s\nError 1:\nThe file %s cannot be deleted because it does not exist,\nit is opened or it is protected. ", asctime(localtime(&ora)), name);
          }
     } /*Chiude l'if della scelta 1*/


  else if(a == 2){


      printf("\nEnter input file name (.txt only): ");
      scanf("%s", &name1);


      printf("\nEnter output file name (.txt only): ");
      scanf("%s", &name);


      char Chv;


      fb=fopen(name,"w+");
      fp=fopen(name1,"rb");


      if (fp == NULL || fb == NULL){
      fprintf(stderr, "\n\n\nError while the program was opening the file!");
      fclose(fp);
      fclose(fb);
      remove(name);
      Sleep(3000);
      return EXIT_FAILURE;
     }


             while((Chv=fgetc(fp))!=EOF){
                 switch(Chv){
               case 'i': fprintf(fb, "A"); break;
               case '@': fprintf(fb, "B"); break;
               case 'I': fprintf(fb, "C"); break;
               case ')': fprintf(fb, "D"); break;
               case 'z': fprintf(fb, "E"); break;
               case 'u': fprintf(fb, "F"); break;
               case '#': fprintf(fb, "G"); break;
               case 'C': fprintf(fb, "H"); break;
               case '|': fprintf(fb, "I"); break;
               case '0': fprintf(fb, "J"); break;
               case '(': fprintf(fb, "K"); break;
               case '!': fprintf(fb, "L"); break;
               case '4': fprintf(fb, "M"); break;
               case '&': fprintf(fb, "N"); break;
               case '1': fprintf(fb, "O"); break;
               case 'Q': fprintf(fb, "P"); break;
               case 't': fprintf(fb, "Q"); break;
               case '8': fprintf(fb, "R"); break;
               case 'K': fprintf(fb, "S"); break;
               case '2': fprintf(fb, "T"); break;
               case '*': fprintf(fb, "U"); break;
               case '<': fprintf(fb, "V"); break;
               case '>': fprintf(fb, "W"); break;
               case '_': fprintf(fb, "X"); break;
               case '-': fprintf(fb, "Y"); break;
               case ']': fprintf(fb, "Z"); break;
               case ':': fprintf(fb, " "); break;
               case '9': fprintf(fb, "a"); break;
               case 'P': fprintf(fb, "b"); break;
               case ';': fprintf(fb, "c"); break;
               case '^': fprintf(fb, "d"); break;
               case '.': fprintf(fb, "e"); break;
               case 'T': fprintf(fb, "f"); break;
               case ' ': fprintf(fb, "g"); break;
               case 'Z': fprintf(fb, "h"); break;
               case '=': fprintf(fb, "i"); break;
               case '7': fprintf(fb, "j"); break;
               case 'F': fprintf(fb, "k"); break;
               case '3': fprintf(fb, "l"); break;
               case 'Y': fprintf(fb, "m"); break;
               case '/': fprintf(fb, "n"); break;
               case '[': fprintf(fb, "o"); break;
               case 'w': fprintf(fb, "p"); break;
               case 'H': fprintf(fb, "q"); break;
               case '$': fprintf(fb, "r"); break;
               case 'M': fprintf(fb, "s"); break;
               case '6': fprintf(fb, "t"); break;
               case 'N': fprintf(fb, "u"); break;
               case 'S': fprintf(fb, "v"); break;
               case '+': fprintf(fb, "w"); break;
               case '5': fprintf(fb, "x"); break;
               case '?': fprintf(fb, "y"); break;
               case 'm': fprintf(fb, "z"); break;
               case 'q': fprintf(fb, ":"); break;
               case 'o': fprintf(fb, "."); break;
               case 'c': fprintf(fb, ","); break;
               case 'l': fprintf(fb, ";"); break;
               case 'D': fprintf(fb, "-"); break;
               case 'x': fprintf(fb, "("); break;
               case 'f': fprintf(fb, ")"); break;
               case 'O':fprintf(fb, "\n"); break;


              }
            }


         fclose(fp);
         fclose(fb);


         stats = remove(name1);
         if(stats == 0){
          printf("\nDone!");
         }


         else{
          printf("\nError! Unable to delete the file!\n\n");
          time_t ora;
          ora = time(NULL);
          fprintf(stderr, "%s\nError 1:\nThe file %s cannot be deleted because it does not exist,\nit is opened or it is protected. ", asctime(localtime(&ora)), name1);
         }
        }


  else if( a == 3){
      printf("\nCheck-in:  ");
      stats = scanf("%d", &passw2);


         if (stats == 0){
           fprintf(stderr, "\n\n\nThe password cannot contain characters, please restart the program!");
           Sleep(3000);
           return EXIT_FAILURE;
  }
    do{
      printf("\nInvalid password!\n\nCheck-in:  ");
      stats = scanf("%d", &passw2);


        if (stats == 0){
          fprintf(stderr, "\n\n\nThe password cannot contain characters, please restart the program!");
          Sleep(3000);
          return EXIT_FAILURE;
  }
    }
    while (passw2 != passw);


           printf("\nEnter new password: ");
           scanf("%d", &passw3);


           printf("\nRe-enter new password: ");
           scanf("%d", &passw4);


    while (passw3 != passw4){
           printf("\nPasswords are not equal!");
           printf("\nEnter new password: ");
           scanf("%d", &passw3);


           printf("\nRe-enter new password: ");
           scanf("%d", &passw4);
    }


                fn = fopen("user.gpl", "w+");
                fprintf(fn, "%d", passw3);
                fclose(fn);
                printf("\nPassword successfully updated!");


      }


  else if(a == 4){
        printf("\n\tGuide");
        printf("\n1)Cript: the program will ask you the name of the input (it must exist) and the output that will be created or rewrited.\nNOTE: only .txt files are supported, you have to write filename.txt!");
        printf("\n2)Decript: the program will ask you the name of the input (it must exist) and the output that will be created or rewrited.\nNOTE: only .txt files are supported, you have to write filename.txt!");
        printf("\n3)Password configuration: it help you to change password, default it is 0000.\n");
        printf("\n\nPress ENTER to exit...");
        getch();
        return EXIT_SUCCESS;
  }


  else if(a == 5){
    return EXIT_SUCCESS;
  }


Sleep(3000);
return EXIT_SUCCESS;
}
@coder7

P.S. Perchè se il file di testo supera gli 800kb lo si cripta e poi lo si decripta diventa un testo incomprensibile?

es:
Prima:
Ciao come stai?
Dopo:
hjgsvtgkjjwhgqj

- - - Updated - - -

Se nel codice ci sono commenti a sproposito sono semplicemente i commenti che ho dimenticato di eliminare... ... :doh:
 
@coder7

P.S. Perchè se il file di testo supera gli 800kb lo si cripta e poi lo si decripta diventa un testo incomprensibile?

es:
Prima:
Ciao come stai?
Dopo:
hjgsvtgkjjwhgqj

- - - Updated - - -



Ti ringrazio per la menzione ma.. una parola neh ! Son passato da almeno 7 anni a c# e il c standard quasi non me lo ricordo.. andrebbe debuggato per bene. Cosa stai usando come IDE ?
 
Ti ringrazio per la menzione ma.. una parola neh ! Son passato da almeno 7 anni a c# e il c standard quasi non me lo ricordo.. andrebbe debuggato per bene. Cosa stai usando come IDE ?

Code::Blocks

Tutto il Lorem Ipsum copiato e incollato 10 volte nello stesso file fanno 1500kb :D
@coder7
 
Ultima modifica:
Code::Blocks

Tutto il Lorem Ipsum copiato e incollato 10 volte nello stesso file fanno 1500kb :D
@coder7

in passato ho usato Ansi C per sviluppare delle cosine sempliciotte in Glide (3dfx) e poi OpenGL, ma ormai ho dimenticato tutto :(
Oddio, farei subito a ritornarci su :D
Fico il compilatore, stasera quasi quasi me lo installo e me lo vedo..tra l'altro cross platform gira per qualunque SO. Fantastico, grazie per la segnalazione.
 
Pubblicità
Pubblicità
Indietro
Top