现在我该怎么做?

What do I do now?

这可能真的很简单,但我现在真的不知道该怎么做。 我最近刚接触编程,我想我应该从学习 C 开始,我知道一些东西,但我最近才遇到这个问题,我想不通。

我正在尝试制作一个 register/login 系统,使用 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) 的东西。有人可以帮我吗?

您可以创建函数而不是将它们全部放在主函数中。 创建一个保存数据的注册函数和一个要求数据作为参数并在主函数中调用的登录函数。

也许你可以创建一个简单的菜单。

当您第一次学习一门语言时,您会发现它的特定使用模式。您的一些问题来自过度使用没有意义的模式。

例如,您知道可以使用 == 比较两个变量,但那是比较值,在某些情况下,您是在比较引用,就好像它们是值一样。引用是内存地址,如果你在 RAM 中有两个字母 Y 那么它们是不同的,有两个不同的引用,即使它们的值相同。

由于您的很多处理过程都使用字符串,因此请通读可用的函数 #include <string.h> 您会听到很多关于其中一些使用起来不安全的说法;现在我建议跳过安全参数,因为在你知道如何调用函数后它们更有意义。

例如

if (yn == Y) {

不会给你想要的结果,但是

if ( strcmp( toupper( yn[0] ), "Y" ) == 0 ) {

会给你想要的结果。在大多数情况下,还有其他方法可以编写相同的逻辑;但是,对于那些想要提供更有效的检查方法的人来说 yn,这是一个旨在展示字符串函数的示例。

C 中的字符串不是单个值。它们是一段内存的地址(有时称为引用),如果你继续阅读 char-by-char 最终应该以 NULL 字符结束,一个包含数字 0 的字符。这意味着它们不能像 yn == Y 那样直接比较,因为你比较的是两个内存地址,而不是两个字符序列。

上面的例子是字符串可以是什么的简化。对于初学者来说,这个定义已经足够了;但是,随着时间的推移,你会发现这个定义非常古老,并且随着时间的推移不断被修改。问题是 char 只能容纳 8 位,因此当需要超过 256 个不同的值时,创建了一个解决方案来容纳更多的值。

第一个解决方案是使用称为 wchar 的“宽字符”,其类型为 wchar_t。这类似于 char,但它包含 16 位。这开始了整个“char”与“wchar_t”的问题。现在您可以忽略它们,但请注意,如果您曾经使用 wchar_t,您需要 wchar 兼容函数。

第二个解决方案是引入 Unicode,它提供了足够的字符,几乎所有语言都可以用 Unicode 编写,甚至是大多数死语言、表情符号、颠倒文本等。Unicode 没有单一的表示方式它的字符,但对于初学者来说有两个流行的字符。每个字符使用 32 个字节的 UTF-32 很受欢迎,因为它易于编程。 UTF-8 之所以流行,是因为它扩展了 ASCII 并成为 Internet 的格式,是 Internet 有效的“正确选择”。

熟悉字符串后,您可能想花一些时间使用 UTF-8。

祝你好运。