Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将文本永久保存到文件并从中读取_C - Fatal编程技术网

C 将文本永久保存到文件并从中读取

C 将文本永久保存到文件并从中读取,c,C,大家好,我必须用C编写一个简单的登录程序,我在保存用户名、全名和密码时遇到问题,因为我需要选择“1”进行注册,选择“2”进行登录,但每次我退出控制台并尝试读取文件时,所有内容都会消失 #include <stdio.h> int main() { FILE *f = fopen("users.txt", "w+"); if (f == NULL) { printf("N/A"); exit(1); } int choose, username[15], fullName[20

大家好,我必须用C编写一个简单的登录程序,我在保存用户名、全名和密码时遇到问题,因为我需要选择“1”进行注册,选择“2”进行登录,但每次我退出控制台并尝试读取文件时,所有内容都会消失

#include <stdio.h>

int main() {

FILE *f = fopen("users.txt", "w+");

if (f == NULL) {
printf("N/A");
exit(1);
}

int choose,
username[15],
fullName[20],
password[15],
// confirmPassword[15];

printf("Welcome!\n");
printf(" 1: Sign up\n 2: Sign in\n");
printf("--------------------------------\n");
scanf("%d", &choose);

if(choose==1) {

    printf("Username: ");
    scanf("%s", &username);

    printf("Full name: ");
    scanf("%s", &fullName);  /// BECAUSE OF SPACE IT COUNTS LIKE A PASSWORD

    printf("Password: ");
    scanf("%s", &password);

    fprintf(f, "%s\n%s\n%s", username, fullName, password);

}

if(choose==2) {

    char c;

    printf("Username: ");
    while( c != EOF) {

        c = fgetc(f);
        printf("%c",c);

    }
}

fclose(f);

return 0;
}
#包括
int main(){
文件*f=fopen(“users.txt”,“w+”);
如果(f==NULL){
printf(“不适用”);
出口(1);
}
int选择,
用户名[15],
全名[20],
密码[15],
//确认密码[15];
printf(“欢迎!\n”);
printf(“1:注册\n 2:登录\n”);
printf(“-------------------------------------\n”);
scanf(“%d”,选择(&C));
如果(选择==1){
printf(“用户名:”);
scanf(“%s”,用户名(&s));
printf(“全名:”);
scanf(“%s”,&fullName);///由于空间的关系,它的计数与密码一样
printf(“密码:”);
scanf(“%s”和密码);
fprintf(f,“%s\n%s\n%s”,用户名、全名、密码);
}
如果(选择==2){
字符c;
printf(“用户名:”);
而(c!=EOF){
c=fgetc(f);
printf(“%c”,c);
}
}
fclose(f);
返回0;
}

我也必须处理哈希,但我会自己尝试。关于///评论的帮助

根据前面的评论和我的想法,下面是您如何修复代码: 1.使用int c或无符号int c声明c变量。 2.设置c tp be(只要不是EOF);
3.make do while循环,最后检查EOF。

注释有什么问题?@GerardoBLANCO问题是当我键入全名时,我必须使用空格,然后在中保存第二个单词&password看起来很像代码执行时
char c;
的值是多少。。。当(c!=EOF){
时,关键是您调用未定义的行为试图访问未初始化的值。您需要
int c=fgetc(f)
以正确初始化它。如前所述,当您声明
char c;
时,在为变量
c
分配一个值之前,有一种已知的方法可以知道散乱垃圾值是什么作为变量
c
的内存位置。此外,类型必须是
int
As
char
在little endian机器上不会匹配
EOF