0

最初にユーザーに名前の入力を求めるクイズ プログラムの作成に成功しました。

クイズが終了すると、スコアが最初に画面に出力され、次に username.txt ファイルに出力されます。

つまり、John.txt、Amy.txt、bob.txt などの実際のユーザー名です。

今、私は事前定義しました

report_file = fopen ("username.txt","w");

これは 100% 機能しますが、当然のことながら、さまざまな人に対してクイズを実行してファイルに記録するたびに、ファイルを正しく識別できませんでした。

sprintf、snprintf、ofstream、istream などの提案を見てきました。

すべてが私にとって新しい概念であり、前進する方法がわかりません...どんな助けも大歓迎です。

誰かが私のプログラムを見たい、または見たいと思っているなら、それは静かでいいので、喜んで共有しますが、この質問中に私のプログラム全体を読むことを誰かに負担させるつもりはありません. :)

4

4 に答える 4

0

ユーザー名がある場合は、それを char 配列に保存してから、O_CREAT を設定して open を呼び出します。これにより、ファイルが作成されていない場合はファイルが作成されます。ユーザー名があるため、ユーザー名でファイルが作成されます。

于 2013-05-31T20:30:06.483 に答える
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を見て、要件に必要な開くためのフラグを確認することもできます

于 2013-05-31T20:30:56.413 に答える
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
于 2013-05-31T22:50:13.850 に答える