2013-05-31 113 views
0

我已經成功創建了一個測驗程序,首先要求用戶輸入他們的名字。如何使用用戶名作爲C文件名創建.txt文件?

測驗結束後,首先將得分打印到屏幕上,然後打印到username.txt文件中。

含義,實際的用戶名如John.txt或Amy.txt或bob.txt。

現在,我已預定義

REPORT_FILE =的fopen( 「username.txt」, 「W」);

這項工作100%,但自然我沒有正確識別文件,每次測驗針對不同的人運行並記錄到文件中。

我見過有關sprintf,snprintf,ofstream,istream等的建議。

對我來說都是新概念,不知道如何前進......任何幫助將不勝感激。

如果有人想要或關心看到我的程序,它很安靜,我很樂意分享,但不打算在這個尋求幫助的過程中讓任何人閱讀我的整個程序。 :)

+0

你需要找到文件,然後添加一些東西呢? – ka2m

+0

您需要定義來自用戶的輸入,獲取用戶名才能打開文件名。 – lsalamon

+0

你已經硬編碼在一個單一的文件名('username.txt'),這顯然意味着它不能是別的。如果您有用戶名,請使用文件名而不是硬編碼值;這對你自己來說不應該太難。 –

回答

0

您沒有使用"username.txt"我希望所有用戶。當你開始測驗時,你會如何處理用戶輸入的名字?

您可能需要類似的東西在你的代碼,請參閱該文檔爲sprintf

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

int main(int argc, char** argv) 
{ 
    FILE* pf = NULL; 
    char username[250]; 
    char userfile[255]; 
    printf("username: "); 
    scanf("%s", username); 
    sprintf(userfile, "%s.txt", username); 
    pf = fopen(userfile, "w"); 
    fprintf(pf, "%d", 100); 
    fclose(pf); 

    return 0; 
} 

你可能也想看看fopen,看看需要什麼標誌打開您的要求

+0

我們有一個贏家!這是缺失的環節。非常感謝你的幫助。我需要爲我的report_file = NULL,並添加另一個字符的用戶文件(我已作爲LINESIZE,它定義爲200)。 – user2364091

+0

@ user2364091不客氣! – A4L

+1

如果用戶名大於'250',會發生什麼情況? – jfs

0

我見過有關sprintf,snprintf,ofstream,istream等的建議。

那麼爲什麼不使用它們呢?

char buffer [256]; 
sprintf(buffer, "%s.txt", username); 
report_file = fopen (buffer,"w"); 

用戶名顯然是一個零結尾的字符串,其中包含用戶

編輯的名字:如需進一步信息,您可以訪問http://www.cplusplus.com/reference/cstdio/sprintf/

+0

如果'username'大於'256'會發生什麼? – jfs

0

如果你有自己的用戶名,只需將其保存到一個char數組,然後使用O_CREAT集調用open。這將創建該文件,如果它沒有創建,並且由於您有他們的用戶名,它將使用他們的用戶名創建一個文件。

0

要創建一個用戶名的文件名,你可以使用snprintf()

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

const char* filename_format = "%s.txt"; 
int n = -1; 
char* filename = NULL; 

if ((n = snprintf(NULL, 0, filename_format, username)) < 0 || 
    (filename = malloc(n+1)) == NULL || 
    snprintf(filename, n+1, filename_format, username) != n) { 
    free(filename); 
    return error; 
} 
/* use filename here... */ 
free(filename); /* clean up */ 

,其中username是一個'\0' - 終止的C字符串,例如,你可以使用readline()得到它:

#include <readline/readline.h> /* readline or editline, etc libraries */ 
/* ... */ 

char* username = NULL; 
if ((username = readline("Enter your name: ")) == NULL) return error; 
/* use username here... */ 
free(username); /* clean up */ 

編譯和鏈接:

$ gcc -std=c99 your_source.c -o program-name -lreadline 
相關問題