2017-02-10 121 views
0

我問兩個簡單的用戶輸入,一個用戶和一個密碼,然後我將它們插入到一個文本文件中,每個文件後面都有一個分號。分號保存和密碼保存,但用戶名不能保存一些奇怪的原因。插入到文本文件空白

例如,如果我輸入喬密碼111222444555它會 顯示爲;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

爲什麼不'fprintf(fp,「%s;%s; \ n」,userId,hash);'? – John3136

+0

可能出於某種原因,您正在寫一些CR(回車)到文件中? 「Joe; ...」的文件需要多長時間? – linuxfan

+0

您應該打印兩個變量,以便您可以看到提供給InsertIntoHash的內容。這將幫助您找出問題所在。 – hymie

回答

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

變化scanf("%s", &userID);scanf("%s", userID);,因爲它已經是其將被傳遞的陣列作爲指針。密碼相同。


注意密碼的緩衝區太小:密碼是12個字符,緩衝區也是這樣,因此終止空字符放置在緩衝區之外(導致出現未定義行爲,就像您遇到的那樣)。

使用"%11s"將讀取的長度限制爲緩衝區的大小,爲終止空字符留出空間。

+0

刪除&從scanf函數後,我仍然得到相同的奇怪結果\ – Master

+0

@Master然後分享奇怪的結果。 –

+0

@AmitKumar,它在原始的芽後。 – Master