检查C中输入标准输入的空格是否不起作用[重复]

hgqdbh6s  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(75)

此问题在此处已有答案

scanf("%[^\n]s",a) with set size of string(2个答案)
10天前关闭。
嘿伙计们,
我刚开始学习C语言,我的代码遇到了一个问题,我试图做一个简单的程序,它将接受输入(名称,密码)并将其附加到一个文件中。

int main()
{
    printf("1. Register\n");
    printf("2. Login\n");
    printf("Please enter your choice: ");

    int choice;

    FILE *file = fopen("data.txt", "a");
    if (file == NULL)
        printf("File cannot be oppened");

    char *name = (char *)malloc(sizeof(char[64]));
    if (name == NULL)
        printf("name malloc failed");

    char *password = (char *)malloc(64 * sizeof(char));
    if (password == NULL)
        printf("password malloc failed");

    char *userInput = (char *)malloc(1024 * sizeof *userInput);
    if (userInput == NULL)
        printf("userInput malloc failed");

    scanf("%d", &choice);

    if (choice == 1)
    {
        printf("Enter username: ");
        fscanf(stdin, "%[^\n]s\n", name);
        fprintf(file, "%s\n", name);

        printf("Enter password: ");

        //check if there's any spaces 
        fscanf(stdin, "%[^\n]s\n", password);
        fprintf(file, "%s\n", password);
    }

    return 0;
}

问题是当我想检查密码或名称是否包含任何空格时,编译不会给予我任何错误,但它只会打印“输入用户名”和“输入密码”,然后退出程序,如果我不使用此检查,程序将相应地工作。
我尝试检查时的输出:
1.注册
1.登录
请输入您的选择:1
用户名:输入密码:
你能告诉我我哪里做错了吗

ukqbszuj

ukqbszuj1#

char *name = (char *)malloc(sizeof(char[64]));

你不应该malloc一个你应该使用的数组的大小

char *name = (char *)malloc(sizeof(char) * 64);

同样,当您检查malloc或文件是否为NULL时,如果失败,则应返回以停止程序。
另外,正如@user3121023所说,您应该将"%[^\n]s\n"更改为" %[^\n]",并在开始时添加空格。

相关问题