2013-05-31 55 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 
相关问题