关于文件数据读取的问题。
emmmm,我想实现一个密码登入的功能,但是在文件读取那块上出了问题。具体应该是指针问题,文件指针没有指向文件所以读取的是一段乱码,但不知道怎么改。
以下是源代码
#include <stdio.h>
#include <string.h>
int main()
{
FILE *pw;
int setup;
char get,pwc;
char enterway,*p=pwc;
if((pw=fopen("password.txt","r+")) == NULL)
{
pw=fopen("password.txt","w+");
setup=1;
}//检测密码文件是否存在,若不存在则创建一个
fclose(pw);
if(setup == 1)
{
pw=fopen("password.txt","w");
printf("请设置您的密码\n");
scanf("%s",pwc);//创建密码
do
{
fputc(*p,pw);//将密码存入文件
p++;
}while(*p != '\0');
}
else
{
pw=fopen("password.txt","r");
while((*p=fgetc(pw)) != EOF)
{
p++;
}
}//从文件中读取密码存入数组pwc
printf("%s\n",get);//测试从密码文件中读入的字符串,调试成功后删除
p=pwc;
do
{
printf("请输入密码:");
scanf("%s",get);//输入密码
if(strcmp(get,pwc)==0)//验证密码
{
break;
}
else
{
printf("密码错误\n");
}
}while(1);
fclose(pw);
return 0;
}
本帖最后由 jxjqdb 于 2017-11-23 19:32 编辑
#include <stdio.h>
#include <string.h>
#define fn "password.txt"//filename
int main()
{
char get, password;//password
char *p=password;
int file_exist();//检测密码文件是否存在
int feflag;//密码文件是否存在的标准,0存在;1不存在
void file_set(int,char*);//创建密码文件并输入与储存密码
void file_input(int,char*);//从文件中读取密码
feflag = file_exist();
file_set(feflag,p);
file_input(feflag,p);
printf("%s\n",get);//测试从密码文件中读入的字符串,调试成功后删除
do
{
printf("请输入密码:");
scanf("%s",get);//输入密码
if(strcmp(get,password)==0)//验证密码
{
break;
}
else
{
printf("密码错误\n");
}
}while(1);
return 0;
}
int file_exist()
{
FILE *fp;
if((fp = fopen(fn,"r"))== NULL)
{
printf("fp:%p\n",fp);
printf("文件不存在\n");
fclose(fp);
return 1;
}
fclose(fp);
return 0;
}
void file_set(int i,char *pw)
{
int a=0;
FILE *fp;
if(i == 1)
{
fp = fopen(fn,"w");
printf("请设置您的密码\n");
scanf("%s",pw);//创建密码
do
{
fputc(pw,fp);//将密码存入文件
a++;
}while( pw!= '\0');
}
}
void file_input(int flag ,char *p)
{
FILE *fp;
int i=0;
char c;
if(flag == 0)
{
fp = fopen("password.txt","r");
while((c = fgetc(fp)) != EOF)
{
p = c;
++i;
}
}
}
尝试了用函数分开写,能正常运行了。 #include <stdio.h>
#include <string.h>
int main()
{
FILE *pw;
int setup;
char get,pwc;
char enterway,*p=pwc;
char c = 0;
if((pw=fopen("password.txt","r+")) == NULL)
{
pw=fopen("password.txt","w+");
setup=1;
}//检测密码文件是否存在,若不存在则创建一个
fclose(pw);
if(setup == 1)
{
pw=fopen("password.txt","w");
printf("请设置您的密码\n");
scanf("%s",pwc);//创建密码
do
{
fputc(*p,pw);//将密码存入文件
p++;
}while(*p != '\0');
}
else
{
pw=fopen("password.txt","r");
int i = 0;
while((c=fgetc(pw)) != EOF)
{
p = c;
++i;
}
p = '\0';
}//从文件中读取密码存入数组pwc
printf("%s\n",get);//测试从密码文件中读入的字符串,调试成功后删除
p=pwc;
do
{
printf("请输入密码:");
scanf("%s",get);//输入密码
if(strcmp(get,pwc)==0)//验证密码
{
break;
}
else
{
printf("密码错误\n");
}
}while(1);
fclose(pw);
return 0;
}
只针对文件数据读取错误....
其他的就...额....{:10_257:} 橙C 发表于 2017-11-23 11:46
只针对文件数据读取错误....
其他的就...额....
结果还是乱码。。。。。。绝望。。。。。。https://timgsa.baidu.com/timg?image&quality=80 &size=b10000_10000&sec=1511439156036&di=1237ad9d72ab27ebe5f76fadca8defed&imgtype=jpg&src=http%3A%2F%2Fc.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F96dda144ad345982b011b13f07f431adcaef8487.jpg jxjqdb 发表于 2017-11-23 17:25
结果还是乱码。。。。。。绝望。。。。。。
{:9_232:}
40行 改成 printf("%s\n",pwc);
页:
[1]