C 插入到文本文件空白处
我要求两个简单的用户输入,一个用户和一个密码,然后将它们插入到一个文本文件中,每个文件后面都有一个分号。分号保存,密码保存,但是用户名由于一些奇怪的原因没有保存 例如,如果我用密码11122244555输入Joe,它将 显示为C 插入到文本文件空白处,c,C,我要求两个简单的用户输入,一个用户和一个密码,然后将它们插入到一个文本文件中,每个文件后面都有一个分号。分号保存,密码保存,但是用户名由于一些奇怪的原因没有保存 例如,如果我用密码11122244555输入Joe,它将 显示为;111222444555;而不是Joe;111222444555; 代码: 更改scanf(“%s”、&userID)到scanf(“%s”,userID)因为它已经是一个数组,将作为指针传递。密码也一样。 请注意,密码的缓冲区太小:密码是12个字符,缓冲区太小,因此终
;111222444555;代码>而不是Joe;111222444555;代码>
代码:
更改scanf(“%s”、&userID)代码>到scanf(“%s”,userID)代码>因为它已经是一个数组,将作为指针传递。密码也一样。
请注意,密码的缓冲区太小:密码是12个字符,缓冲区太小,因此终止的空字符被放置在缓冲区之外(导致未定义的行为,正如您遇到的)
使用“%11s”
将读取的长度限制为缓冲区的大小,为终止的空字符留出空间。更改scanf(“%s”和&userID)代码>到scanf(“%s”,userID)代码>因为它已经是一个数组,将作为指针传递。密码也一样。
请注意,密码的缓冲区太小:密码是12个字符,缓冲区太小,因此终止的空字符被放置在缓冲区之外(导致未定义的行为,正如您遇到的)
使用“%11s”
将读取的长度限制为缓冲区的大小,为终止的空字符留出空间。您应该使用scanf(“%31s”,userID)读取字符串
用于用户ID和scanf(“%11s”,密码)密码的代码>。
我认为导致问题的原因是,您在主函数之后声明并定义了InsertIntoHash
,而没有在开始时声明原型。
因此,代码应该如下所示:(我测试了它,它工作正常)
#包括
#包括
void InsertIntoHash(char*userID,char*hash);
int main(){
int尝试次数=3;
int结果=0;
字符用户标识[32];
printf(“请输入您的用户id\n”);
scanf(“%31s”,userID);
字符密码[12];
printf(“未找到用户。请输入您的密码\n”);
scanf(“%11s”,密码);
printf(“用户名和密码已保存”);
printf(“\n”);
InsertIntoHash(用户ID、密码);
返回0;
}
void InsertIntoHash(char*userID,char*hash){
文件*fp;
fp=fopen(“HashTable.txt”,“a”);
fprintf(fp,userID);
fprintf(fp,“;”);
fprintf(fp,散列);
fprintf(fp,;\n“);
fclose(fp);
}
我希望我能帮助你!:) 您应该使用scanf(“%31s”,userID)读取字符串
用于用户ID和scanf(“%11s”,密码)密码的代码>。
我认为导致问题的原因是,您在主函数之后声明并定义了InsertIntoHash
,而没有在开始时声明原型。
因此,代码应该如下所示:(我测试了它,它工作正常)
#包括
#包括
void InsertIntoHash(char*userID,char*hash);
int main(){
int尝试次数=3;
int结果=0;
字符用户标识[32];
printf(“请输入您的用户id\n”);
scanf(“%31s”,userID);
字符密码[12];
printf(“未找到用户。请输入您的密码\n”);
scanf(“%11s”,密码);
printf(“用户名和密码已保存”);
printf(“\n”);
InsertIntoHash(用户ID、密码);
返回0;
}
void InsertIntoHash(char*userID,char*hash){
文件*fp;
fp=fopen(“HashTable.txt”,“a”);
fprintf(fp,userID);
fprintf(fp,“;”);
fprintf(fp,散列);
fprintf(fp,;\n“);
fclose(fp);
}
我希望我能帮助你!:) 为什么不fprintf(fp,'%s;%s;\n',userId,hash)代码>?可能由于某种原因,您正在将某些CR(回车)写入文件?“Joe;…”的文件有多长?您应该打印这两个变量,以便查看提供给InsertIntoHash的内容。这将帮助您找出问题所在。为什么不fprintf(fp,%s;%s;\n),userId,hash)代码>?可能由于某种原因,您正在将某些CR(回车)写入文件?“Joe;…”的文件有多长?您应该打印这两个变量,以便查看提供给InsertIntoHash的内容。这将帮助您找出问题所在。从scanf函数中删除和之后,我仍然会得到相同的奇怪结果\@Master,然后共享该奇怪结果。@AmitKumar,它位于原始的post bud中。从scanf函数中删除和之后,我仍然会得到相同的奇怪结果\@Master,然后共享该奇怪结果。@AmitKumar,这是原始的post bud。
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);
}
#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);
}