【发布时间】:2020-10-24 12:55:50
【问题描述】:
这可能真的很简单,但我现在真的不知道该怎么做。 我最近刚开始编程,我想我应该从学习 C 开始,我知道一些东西,但我最近才遇到这个问题,我想不通。
我正在尝试创建一个使用 scanf() 将凭据存储到字符串中的注册/登录系统,但我真的不知道如何让登录部分正常工作。我是否需要创建更多字符串并将输入存储在那里?或者如何将用户的输入与字符串中的值进行比较?
我的代码目前看起来像这样:
#include<stdlib.h>
#include<time.h>
char user[30] = "";
char password[30] = "";
char yn[30] = "";
char Y[1] = "Y";
char N[1] = "N";
int main() {
printf("Register\n");
printf("The User or Password can't be longer than 30 characters\n");
printf("User: \n");
scanf("%s", &user);
if (user == NULL)
printf("User can't be empty\n");
else
printf("Password: \n");
scanf(" %s", &password);
if (password == NULL)
printf("Password can't be empty\n");
printf("User saved as: \n");
printf("%s\n", &user);
printf("Password saved as: \n");
printf("%s\n", &password);
printf("Is this correct?\n");
printf("Y/N\n");
scanf("%s", yn);
if(yn == Y){
printf("\e[1;1H\e[2J");
}
if(yn == N){
printf("Restarting...");
}
printf("Login\n");
printf("User: \n");
}
一切正常(除了我不知道如何在要求登录之前清除控制台,这不会工作printf("\e[1;1H\e[2J");),我什至设法将用户的输入打印到控制台供他制作确定它是正确的,我做了一个(Y/N)的东西。有人可以帮帮我吗?
【问题讨论】:
-
if (user == NULL)永远不会为真,因为user[]是一个具有固定地址的数组。如果您尝试检测空字符串;你不能用scanf("%s", &user);输入一个空字符串(无论如何应该是scanf("%29s", user);)。 -
清除控制台比人们想象的要棘手,因为它取决于控制台的特性。您正试图通过编写一个 ANSI 终端控制转义序列来做到这一点,但是(假设您有正确的序列)只有在控制台接受 ANSI 序列时才有效,而如今,许多人不接受。
-
清除控制台的低技术方法是打印足够的空白行以将所有先前的文本滚动到屏幕外,但是(1)您需要知道控制台有多少行,或者至少最大值,以及 (2) 将光标留在屏幕底部而不是顶部。
-
您不能将字符串与
if(yn == Y)或if(yn == N)进行比较,而且这些测试都不会是真的。这意味着控制台从未收到过清屏序列。请使用strcmp()。 -
其他清除控制台的方法可能不是您应该关注的(在)经验水平。
标签: c authentication printf scanf