Dev - C++ - Manejar un txt

 
Vista:
sin imagen de perfil
Val: 46
Ha aumentado su posición en 35 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Manejar un txt

Publicado por Guerrero15 (9 intervenciones) el 23/07/2021 14:02:14
Buenos días:

Hace un par de días se me ocurrió hacer un programa que te pida una contraseña y que la puedas cambiar, y dado que creo que no se puede cambiar el código fuente desde un ejecutable se me ocurrió la idea de guardar una palabra (La contraseña) en un txt y leerlo para comprobarla, pero como es mi primera vez utilizando documentos de textos estoy teniendo varios problemas.

Uno de ellos es que cuando sobrescribo lo que hay en el txt, éste se guarda vacío.

El segundo es que después de pasar esto, si vuelvo a empezar el programa con un return main(), es decir, sin cerrar el ejecutable, cuando pide la contraseña da igual lo que pongas, te lo da por válido.

Aunque he estado mirando varias páginas web, no he sabido solucionarlo.

Algún consejo?

Aquí abajo les dejo el código, pero antes he de decir que para sobrescribir he usado tanto fprintf como fputs y ninguno me ha funcionado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <stdbool.h>
 
int main(){
    int i, a=0, b=0, e=0, resp;
    char cont1[30], cont4[30], new_pw[30], new_pw2[30];
    bool c = false, d = false;
 
    for (i=0; i<30; i++){
            cont1[i] = 0;
            cont4[i] = 0;
            new_pw[i] = 0;
            new_pw2[i] = 0;
        }
 
    setlocale (LC_ALL, "spanish");
 
    FILE *f;
 
    f = fopen ("PW.txt", "r");
 
    fscanf (f, "%s", &cont1);
 
    fclose(f);
 
    printf ("\n 1 - Iniciar sesion\n 2 - Nueva contraseña\n\n Opción: ");
    scanf ("%d", &resp);
 
    switch (resp){
        case 1:
            for (i=0; i<30; i++){
                if (cont1[i] != 0){
                    a++;
                }
            }
 
            char cont2[a], cont3[a];
 
            for (i=0; i<a; i++){
                cont2[i] = cont1[i];
            }
 
            printf ("\n Inserte contraseña: ");
            scanf ("%s", &cont3);
 
            for (i=0; i<a; i++){
                if (cont2[i] == cont3[i]){
                    b++;
                }
            }
 
            if (a == b){
                printf ("\n Contraseña correcta...");
                system ("pause>null");
                system ("cls");
                return main();
            }
 
            else {
                printf ("\n Contraseña incorrecta...");
                system ("pause>null");
                system ("cls");
                return main();
            }
        break;
 
        case 2:
            do{
                b = 0;
                e = 0;
 
                printf ("\n Contraseña actual: ");
                scanf ("%s", &cont4);
                printf ("\n Nueva contraseña: ");
                scanf ("%s", &new_pw);
                printf ("\n Repetir contraseña: ");
                scanf ("%s", &new_pw2);
 
                for (i=0; i<30; i++){
                    if (cont4[i] == cont1[i]){
                        b++;
                    }
                }
 
                for (i=0; i<30; i++){
                    if (new_pw[i] == new_pw2[i]){
                        e++;
                    }
                }
 
                if (b == 30 && e == 30){
                    c = true;
                    d = true;
                }
 
                else {
                    if(b != 30){
                        printf ("\n Contraseña incorrecta. Pulse cualquier tecla para continuar...");
                    }
 
                    else if (e != 30){
                        printf ("\n Las contraseñas no coinciden. Pulse cualquier tecla para continuar...");
                    }
 
                    else if (b != 30 && e != 30){
                        printf ("\n Contraseña incorrecta");
                        printf ("\n Las contraseñas no coinciden");
                    }
                }
            }
 
            while (c != true && d != true);
 
            printf ("\n Contraseña cambiada...");
 
            FILE *f2;
 
            f2 = fopen("PW.txt", "w");
 
            fprintf (f2, "%s", cont3);
 
            system ("pause>null");
 
            fclose(f2);
 
            system ("cls");
            return main();
        break;
 
        default:
            printf ("\n Respuesta incorrecta. Pulse cualquier tecla para continuar...");
            system ("pause>null");
            system ("cls");
            return main();
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 46
Ha aumentado su posición en 35 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Manejar un txt

Publicado por Guerrero15 (9 intervenciones) el 26/07/2021 12:47:37
Ya he encontrado el fallo. Era tan obvio que no lo he visto.

EL problema está en la variable que meto en el fprinf. No hay que meter la variable 'cont3', sino que hay que meter o 'new_pw` o `new_pw2`, aquí les dejo el código correcto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <stdbool.h>
 
int main(){
    int i, a=0, b=0, e=0, resp;
    char cont1[30], cont4[30], new_pw[30], new_pw2[30];
    bool c = false, d = false;
 
    for (i=0; i<30; i++){
            cont1[i] = 0;
            cont4[i] = 0;
            new_pw[i] = 0;
            new_pw2[i] = 0;
        }
 
    setlocale (LC_ALL, "spanish");
 
    FILE *f;
 
    f = fopen ("PW.txt", "r");
 
    fscanf (f, "%s", &cont1);
 
    printf ("\n Contraseña = %s \n", cont1);
 
    fclose(f);
 
    printf ("\n 1 - Iniciar sesion\n 2 - Nueva contraseña\n\n Opción: ");
    scanf ("%d", &resp);
 
    switch (resp){
        case 1:
            for (i=0; i<30; i++){
                if (cont1[i] != 0){
                    a++;
                }
            }
 
            char cont2[a], cont3[a];
 
            for (i=0; i<a; i++){
                cont2[i] = cont1[i];
            }
 
            printf ("\n Inserte contraseña: ");
            scanf ("%s", &cont3);
 
            for (i=0; i<a; i++){
                if (cont2[i] == cont3[i]){
                    b++;
                }
            }
 
            if (a == b){
                printf ("\n Contraseña correcta...");
                system ("pause>null");
                system ("cls");
                return main();
            }
 
            else {
                printf ("\n Contraseña incorrecta...");
                system ("pause>null");
                system ("cls");
                return main();
            }
        break;
 
        case 2:
            do{
                b = 0;
                e = 0;
 
                printf ("\n Contraseña actual: ");
                scanf ("%s", &cont4);
                printf ("\n Nueva contraseña: ");
                scanf ("%s", &new_pw);
                printf ("\n Repetir contraseña: ");
                scanf ("%s", &new_pw2);
 
                for (i=0; i<30; i++){
                    if (cont4[i] == cont1[i]){
                        b++;
                    }
                }
 
                for (i=0; i<30; i++){
                    if (new_pw[i] == new_pw2[i]){
                        e++;
                    }
                }
 
                if (b == 30 && e == 30){
                    c = true;
                    d = true;
                }
 
                else {
                    if (b != 30 && e != 30){
                        printf ("\n Contraseña incorrecta");
                        printf ("\n Las contraseñas no coinciden");
 
                    }
 
                    else if (e != 30){
                        printf ("\n Las contraseñas no coinciden");
                    }
 
                    else if(b != 30){
                        printf ("\n Contraseña incorrecta");
                    }
 
                    printf ("\n Pulse cualquier tecla para continuar... \n");
                    system ("pause>null");
                }
            }
 
            while (c != true && d != true);
 
            FILE *f2;
 
            f2 = fopen("PW.txt", "w");
 
            fprintf (f2, "%s", new_pw);
 
            fclose(f2);
 
            printf ("\n Contraseña cambiada...");
 
            system ("pause>null");
            system ("cls");
            return main();
        break;
 
        default:
            printf ("\n Respuesta incorrecta. Pulse cualquier tecla para continuar...");
            system ("pause>null");
            system ("cls");
            return main();
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar