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


0