我有這個功能,應該檢查用戶名是否被列入黑名單,如果不是,它應該通過檢查用戶名是否存在於「登錄」用戶第二個文件。如果是,那麼該文件中的那一行將被記住,並且該函數應該在第三個文件中檢查,如果記住的行上的密碼是正確的,那麼基本上用戶名的行是他的密碼的行,並且如果這兩個匹配與輸入和用戶不列入黑名單,那麼它應該返回一個正解。c文件輸入功能沒有按預期工作
不幸的是,無論我輸入什麼,我的功能似乎都會返回一個肯定的答案。任何人都可以指出我的錯誤是什麼,以便它能按預期工作?
編輯了無意的錯誤,我仍然有和問題,即我不能停止閱讀,如果該文件是不是在blacklist.txt
代碼:
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/wait.h>
#include <sys/socket.h>
#include <signal.h>
#include <ctype.h>
#include <arpa/inet.h>
#include <netdb.h>
int login(char username[20],char pw[20])
{
FILE *fp = fopen("blacklist.txt","r");
int ok = 0, pw_line=0,oku=0,savepwline=0,count=0,okp=0;
while (ok==0)
{
if (fp != NULL)
{
char line[20];
while (fgets(line,sizeof(line), fp) != NULL)
{
size_t i=strlen(line)-1;
if(line[i]=='\n')
line[i]='\0';
if (strcmp(username,line) == 0) ok=1;
}
}
}
fclose(fp);
if (ok==1)
{
printf("user blacklisted\n");
}
else
{
FILE *fp2 = fopen("loginuser.txt","r");
while (oku==0)
{
if (fp2 != NULL)
{
char line3[20];
while (fgets(line3,sizeof(line3), fp2) != NULL)
{
pw_line++;
size_t i=strlen(line3)-1;
if(line3[i]=='\n')
line[i]='\0';
if (strcmp(username,line3) == 0) { oku=1; savepwline=pw_line; }
}
}
}
FILE *fp3 = fopen("loginpw.txt","r");
if (oku==1)
if (fp3 != NULL)
{
char line2[20];
while (fgets(line2,sizeof(line2), fp3) != NULL)
{
if (count == savepwline)
{
size_t i=strlen(line2)-1;
if(line2[i]=='\n')
line2[i]='\0';
if (strcmp(pw,line2) == 0) okp=1;
}
else count++;
}
}
fclose(fp2);
fclose(fp3);
}
if(oku&&okp) return 1;
else return 0;
}
int main()
{
char a[20],b[20];
scanf("%s",a);
scanf("%s",b);
if(login(a,b)) printf("yes");
else printf("no");
}
樣本文件(「loginuser.txt 「/"loginpw.txt」):
hihi
aloss
foif
distsd
blacklist.txt:
carl
gigc
ffgfd
gdfgdd
rreti
'而(OK = 0){}'應該是'OK = 0;' – user3386109
您是否嘗試過通過程序與調試器步進? –
不,我現在不能使用調試器,不幸的是,或者那將是我嘗試的第一件事。 @ user3386109我不明白你的觀點 – bf16