插入文本文件空白

时间:2017-02-10 10:42:41

标签: c

我要求两个简单的用户输入,一个用户和一个密码,然后我将它们插入到一个文本文件中,每个文件后跟一个分号。半冒号保存并密码保存,但用户名由于某些奇怪的原因而无法保存。

例如,如果我输入密码为111222444555的Joe,那就是#lil 显示为;111222444555;而不是Joe;111222444555;

代码:

int main()
{
    int Number_Of_Attempts = 3;
    int result = 0;
    char userID[32];
    printf("Please enter your user id\n");

    scanf("%s", &userID);

    char password[12];

    printf("The user has not been found. Please enter your a password\n");


    scanf("%s", &password);


    printf("Username and Password has been saved");
    printf("\n");

    InsertIntoHash(userID, password);

    return 0;
}


void InsertIntoHash(char *userID, char *hash)
{
    FILE *fp;
    fp = fopen("HashTable.txt", "a");
    fprintf(fp, userID);
    fprintf(fp,";");
    fprintf(fp, hash);
    fprintf(fp, ";\n");
    fclose(fp);
}

2 个答案:

答案 0 :(得分:2)

您应该使用scanf("%31s", userID);作为用户ID读取字符串,并使用scanf("%11s", password);读取密码。
我认为导致问题的是,您在主函数之后声明并定义InsertIntoHash,而不是在开始时声明原型。 所以代码应该是以下内容:(我测试过它并且有效)

#include <stdio.h>
#include <stdlib.h>

void InsertIntoHash(char *userID, char *hash);

int main() {
    int Number_Of_Attempts = 3;
    int result = 0;
    char userID[32];
    printf("Please enter your user id\n");
    scanf("%31s", userID);
    char password[12];
    printf("The user has not been found. Please enter your a password\n");
    scanf("%11s", password);
    printf("Username and Password has been saved");
    printf("\n");
    InsertIntoHash(userID, password);
    return 0;
}

void InsertIntoHash(char *userID, char *hash) {
    FILE *fp;
    fp = fopen("HashTable.txt", "a");
    fprintf(fp, userID);
    fprintf(fp,";");
    fprintf(fp, hash);
    fprintf(fp, ";\n");
    fclose(fp);
}

我希望我能帮到你! :)

答案 1 :(得分:1)

scanf("%s", &userID);更改为scanf("%s", userID);,因为它已经是一个将作为指针传递的数组。密码相同。

<小时/> 请注意密码的缓冲区太小:密码是12个字符,缓冲区也是如此,因此终止空字符放在缓冲区之外(导致未定义的行为,如遇到的那样)。

使用"%11s"将读取的长度限制为缓冲区的大小,为终止空字符留出空间。