#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
}
搞定了。。。我是用成功了的。。。如果有问题就发信给我。。。。
提供一个思路,隐液液将txt文件中的内容读取到一个数组中,这个数组中的数据应该是你自定义的结构体。然后将该用户名与数组中的灶物内容循环比较。如果发现有相等的(即已存在),则注册失败!给个例子:
#include <stdio.h>int main()
{
int v[100]//开一个足够大的数组。
int i = 0, j
FILE *fp//文件指针
fp = fopen("in.txt", "r")//以文本方式打开文件。
if(fp == NULL) //打开文件出错。
return -1
while(fscanf(fp, "%s", v[i]) != EOF) //读取数据到数组,直到文件结尾(返回EOF)
i++
fclose(fp)//关闭文件
char registerName[20]
for(j = 0 j < i j ++)//循环输出数组元素。
{
if (strcmp(registerName, v[i].name) == 0)
埋颤 {
printf("该用户名已存在!\n")
break
}
}
return 0
}
大概就这样的。具体的细节你自己调试。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)