我已经成功创建了一个测验程序,该程序首先要求用户输入他们的名字。
测验结束后,分数首先打印到屏幕,然后打印到username.txt文件中。
含义,实际用户名称如John.txt或Amy.txt或bob.txt。
现在,我预定了
report_file = fopen(“username.txt”,“w”);
这100%有效但我自然无法在每次为不同的人运行测验时正确识别文件并将其记录到文件中。
我见过有关sprintf,snprintf,ofstream,istream等的建议。
所有这些对我来说都是新概念,并且不知道如何向前发展......任何帮助都将不胜感激。
如果有人想要或想要看我的节目,那就很安静了,我很乐意分享,但不打算让任何人在寻求帮助时阅读我的整个节目。 :)
答案 0 :(得分: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/
答案 1 :(得分:0)
如果您有他们的用户名,只需将其保存到char数组中,然后使用O_CREAT set调用open。如果文件未创建,则会创建该文件,并且由于您拥有其用户名,因此将使用其用户名创建文件。
答案 2 :(得分: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,了解您需要打开的标志
答案 3 :(得分: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