拿easyx写登录程序的时候发现一个挺奇怪的bug(字符串比较有问题),翻了好多资料都没解决QAQ

-1

这是出问题的函数块儿

void CompareData(wchar_t username[20], wchar_t password[20]) {
	char un[256], pw[256];
	//printf("before username %20S\n", username);
	//printf("before password %20S\n", password);
	WideCharToMultiByte(CP_ACP, 0, username, wcslen(username) + 1, un, 256, NULL, NULL);
	WideCharToMultiByte(CP_ACP, 0, password, wcslen(password) + 1, pw, 256, NULL, NULL);
	//printf("char username %20s\n", un);
	//printf("char password %20s\n", pw);
	userdata data[20] = { 0 };
	FILE* file;

	file = fopen("D:\\myproj\\Signin\\Debug\\userdata\\data.txt", "a+");//创建文件对象
	if (NULL == file) {
		printf("Open file failed or no this file!\n");
		return;
	}//判断文件是否正常打开
	int i = 0;
	while (!feof(file)) {
		fscanf(file, "%s%s", data[i].userName, data[i].passWord);
		i++;
	}//将文件中的用户数据赋给预备好的空结构体
	int cycle;
	do {
		for (cycle = 0; cycle < i; cycle++) {



			if (strcmp(un, data[cycle].userName) == 0&&strcmp(pw, data[cycle].passWord) == 0) {//就是这里有问题




				LOGFONT f;
				cleardevice(); // 清除屏幕
				putimage(0, 0, &img_background);
				DrawInputBox(500, 300, 1000, 340, input_pw);
				settextcolor(RED); // 设置字体颜色
				outtextxy(300, 550, L"登录成功。");
				FlushBatchDraw();
				break;
			}
		}
		if (cycle == i) {
			userdata* p = (userdata*)malloc(sizeof(userdata));
			strcpy(p->userName, un);//把username的值赋给结构体内的变量
			strcpy(p->passWord, pw);
			fprintf(file, "%s%s", p->userName, p->passWord);
			cleardevice(); // 清除屏幕
			putimage(0, 0, &img_background);
			DrawInputBox(500, 300, 1000, 340, input_pw);
			settextcolor(RED); // 设置字体颜色
			outtextxy(300, 550, L"您输入的账号或密码错误,已经帮您注册新用户。");
			FlushBatchDraw();
			free(p);
			break;
		}
	} while (1);
	fclose(file);
}

不能发图片我就挂个链接

麻烦大佬帮我看一下到底是怎么回事

拜托了QAQ

https://blog.csdn.net/Solmane/article/details/106629007

ava
Mani

2020-6-8

0

你贴在 CSDN 的图文混排的内容仍然看起来很乱。

你应该删掉无关的内容,仅保留有限的、能体现你的问题的、可以编译的部分,然后发出来。

像你现在这样发了一堆,别人还没办法编译调试,单凭肉眼看多累啊。

你的问题细节我没看,我直接告诉你应该怎么做:

1. 全部编码都使用 unicode。

2. 文本文件可以考虑用 ini 格式, 这样不用担心编码问题。参考:https://codebus.cn/yangw/ini-configuration

这样改完,绝对不会出错。

ava
慢羊羊

2020-6-8

不好意思添麻烦了Orz只按照我的想法放图,没有过多的考虑读者的阅读体验,真的不好意思......程序的bug其实是因为回车符(\r)的问题,已经想办法解决了~最后谢谢大佬帮忙,ini的格式也很有启发,正好程序的另一部分要用到。真是麻烦了 -  Mani  2020-6-8
技术讨论社区