我要求两个简单的用户输入,一个用户和一个密码,然后我将它们插入到一个文本文件中,每个文件后跟一个分号。半冒号保存并密码保存,但用户名由于某些奇怪的原因而无法保存。
例如,如果我输入密码为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);
}
答案 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);
,因为它已经是一个将作为指针传递的数组。密码相同。
使用"%11s"
将读取的长度限制为缓冲区的大小,为终止空字符留出空间。