好的,这只是一个简单的客户端 - 服务器程序的一部分。现在我只想尝试实现一个简单的登录检查器。
在Users.txt文件中只有一行:“Bryan”。到目前为止,我无法做出积极的回应。
#include <stdio.h>
#include <string.h>
#define BUFSIZE 1024
int main()
{
FILE * userf;
userf = fopen("Users.txt", "r");
char usrstr[30];
char buffer[30];
char userbuffer[30];
fgets (buffer, sizeof(buffer), userf); //loads Users.txt in buffer
gets(userbuffer); //type whatever user
printf ("Your login is: %s\n", userbuffer);
if(strncmp (buffer, userbuffer, sizeof(userbuffer)) == 0)
{
sprintf(usrstr, "\nCorrect login received.\n"); // faster than printf
puts(usrstr); //displays content of sprintf above
bzero(usrstr, sizeof(usrstr)); //clears usrstr buffer
printf("buffer is %s.\n",buffer); //for checking
printf("userbuffer is %s.\n",userbuffer); //for checking
}
else
{
sprintf(usrstr, "\nIncorrect login received.\n");
puts(usrstr);
bzero(usrstr, sizeof(usrstr));
printf("buffer is %s.\n",buffer); //for checking
printf("userbuffer is %s.\n",userbuffer); //for checking
}
fclose(userf);
return(0);
}
然后我得到输出:
Bryan
Your login is: Bryan
Incorrect login received.
buffer is Bryan
.
userbuffer is Bryan.
我猜测缓冲区之后的长间距是关键原因,但我不知道是什么导致它。 我的编程技巧很糟糕,所以非常感谢任何帮助。
答案 0 :(得分:0)
这对我有用
“Bryan”后你的[ENTER]
中有换行符Users.Txt
从文本文件中删除换行符。
或者
使用
fgets (buffer,strlen(userbuffer)+1, userf);
用户输入后
答案 1 :(得分:0)
尝试更改
if(strncmp(buffer,userbuffer,sizeof(userbuffer))== 0)
到
if(strncmp(buffer,userbuffer,strlen(userbuffer))== 0)
这样它只会比较thr字符串的长度 - 而不是整个缓冲区