首先看下fwrite的原型
创新互联是由多位在大型网络公司、广告设计公司的优秀设计人员和策划人员组成的一个具有丰富经验的团队,其中包括网站策划、网页美工、网站程序员、网页设计师、平面广告设计师、网络营销人员及形象策划。承接:网站建设、网站制作、网站改版、网页设计制作、网站建设与维护、网络推广、数据库开发,以高性价比制作企业网站、行业门户平台等全方位的服务。
size_t fwrite(const void* buffer,size_t size,size_t count,FILE* stream);
(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针。
printf("请输入用户名(最大7位):");
scanf("%s",c1);
fwrite(c1,8,1,fp); // line one
printf("请输入密码(最大15位):");
scanf("%s",d1);
fwrite(d1,16,1,fpm); //line two
line one 的参数应该是(c1,sizeof(char),8,fp);
line two 的参数应该是(d1,sizeof(char),16,fpm);
while(s2[iu]!='\0')
{
fread(s2[iu],sizeof(char),1,fp);
iu++;
fp++; //这里是不需要的,文件读取之后文件内部指针会自动移动
} //还有这里是可以一次读取出来的,为什么不这样做呢?
下面读取密码的时候也是一样,其他暂时没看出什么来。。。。
读取出的东西不对,除了读取的方式有错,再就是本来写入的数据就是错误的、
要调用Windows
API的RegOpenKeyEx(),
RegSetValueEx(),
RegSetValueEx()等函数。首先要确认你的C编译器支持调用Windows
API.
举例:
要自动运行"D:\Myprog\MyProgram.exe",
修改注册表,在
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
中加一项:
RunMyProg="D:\Myprog\MyProgram.exe"
#include
windows.h
static
char
subkey[]
=
"Software\\Microsoft\\Windows\\CurrentVersion\\Run";
static
char
vname[]
=
"RunMyProg";
static
char
exefile[]
=
"D:\\Myprog\\MyProgram.exe";
ULONG
dType
=
REG_SZ,
len
=
0;
HKEY
hKey;
RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_SET_VALUE|KEY_QUERY_VALUE,hKey);//打开。
if
(RegQueryValueEx(hKey,
vname,
0,
dType,
NULL,
len))
{
//如果没有RunMyProg,
RegSetValueEx(hKey,
vname,
0,
REG_SZ,
exefile,
strlen(exefile)+1);
//就加上。
}
RegCloseKey(hKey);
//关闭。
模拟用户注册和登陆可以用文件来保存用户名和密码。注册就是向文件里写,用if判断两次密码是否一致。连续三次,可以有一个变量,每次输入加一,变量大于三就提示登陆不成功。用户名不对,那你就把你输入的用户名和文件里的用户名是否一致。
#include stdlib.h
#include stdio.h
#include string.h
bool search(char id[], char pass[]) {
FILE *fp;
char tid[10], tpass[10];
fp = fopen("c:\\data", "r");
while (!feof(fp)) {
fscanf(fp, "%s%s", tid, tpass);
if (strcmp(tid, id)==0 strcmp(tpass, pass)==0) {
fclose(fp);
return true;
}
}
fclose(fp);
return false;
}
bool login() {
char id[10], pass[10];
printf("Login\nPress the id: ");
scanf("%s", id);
printf("Press the password: ");
// 可以自行将password处理成*号, 如果不会可以发信给我
scanf("%s", pass);
printf("-----------------------");
if (search(id, pass))
return true;
else
return false;
}
void _add(char id[], char pass[]) {
FILE *fp;
fp=fopen("c:\\data", "a");
// 在写入文件时可以按一定的排序方式插入,可减少以后Login时的search时间
fprintf(fp, "%s %s\n", id, pass);
fclose(fp);
}
void regis() {
char id[10], pass[10], tpass[10];
printf("Register\nPress the id: ");
scanf("%s", id);
while (true) {
printf("Press the password: ");
scanf("%s", pass);
printf("Press the password again: ");
scanf("%s", tpass);
if (strcmp(pass, tpass) != 0)
printf("The passwords you pressed are not the same!\n");
else
break;
}
_add(id, pass);
printf("-----------------------Register successfully!\n");
}
void init() {
FILE *fp;
if ((fp=fopen("c:\\data", "r")) == NULL) { // 注意,一定要有个名叫data(没有扩展名)的合法文件在C盘根目录
printf("---------File is not exist\n");
system("pause");
exit(0);
}
else
fclose(fp);
}
int main(void){
int command;
init(); // 检查data文件在不在
while (true) {
printf("-----------------------(Login: 1 Register: 2 Exit: 3)\n");
scanf("%d", command);
printf("-----------------------\n");
// 这里可以编写command的检测语句
if (command == 3)
break;
else if (command == 1) {
if (!login())
printf("ID is not exist or password is wrong!\n");
else
printf("Login successfully!\n");
}
else
regis();
}
return 0;
}
搞定了。。。我是用成功了的。。。如果有问题就发信给我。。。。