/*指定された性別[2]は 4 文字に収まらないようです。 。 。 。 。 。でも質問の意味は分かりました。
**プログラミングを簡略化するために、構造体のすべてのデータを文字配列に変更しました。数値が必要な場合は、別の変換ステップを追加するだけです**。比較的単純なので書きません。さらに、プログラムで使用される構造体配列 ファイルに何行あるかわからない場合は、メモリを節約するために動的割り当てを使用できます。急いで書いたので、カプセル化された関数はありませんが、確かに使えるので、これで間に合わせてください~~~
*/
####含む ######構造体採用<...>
{文字ID[10];
文字名[10];
文字性別[5];
文字年齢[5];
文字教育[10];
文字賃金[5];
文字アドレス[20];
文字番号[20];
};
int _tmain(int argc, _TCHAR* argv[])
{
char buf[100];
ファイル* pf=NULL;
構造体は Ep[10]={};
を採用
int フラグ=0;pf=fopen("employ.dat","r");
if(!pf)
{
printf("ファイルを開けませんでした!\n");
system("一時停止");
-1 を返す;
}
while(fgets(buf,99,pf))
{
char* pchar=buf;
for(int i=0;i {
Ep[フラグ].id[i]=*pchar;
if(*pchar ==',')
###壊す;###
}for(int i=0;i {
Ep[フラグ].name[i]=*pchar;
if(*pchar ==',')
###壊す;###
}for(int i=0;i {
Ep[フラグ].sex[i]=*pchar;
if(*pchar ==',')
###壊す;### }
for(int i=0;i {
Ep[フラグ].age[i]=*pchar;
if(*pchar ==',')
###壊す;###
}for(int i=0;i
{Ep[フラグ].edu[i]=*pchar;
if(*pchar ==',')
###壊す;###
}for(int i=0;i {
Ep[フラグ].wage[i]=*pchar;
if(*pchar ==',')
###壊す;###
}for(int i=0;i {
Ep[フラグ].アドレス[i]=*pchar;
if(*pchar ==',')
###壊す;###
}for(int i=0;i {
Ep[フラグ].number[i]=*pchar;
if(!*pchar )
###壊す;###
}//printf("%s",buf);
### フラグ;###
}fclose(pf);
system("一時停止");
0を返す;
}
C 言語の txt ファイルでデータ変数を使用する方法
fopen 関数と fscanf 関数を使用して、txt ファイルからコンテンツを読み取り、簡単な操作を実行します。
1.Fopen 関数のプロトタイプ: FILE * fopen(const char * path, const char * mode);
fopen 関数の最初のパラメータはファイル パス、2 番目のパラメータは開くメソッドです。次のメソッドがあります:
r ファイルを読み取り専用モードで開きます。ファイルは存在している必要があります。
r ファイルを読み取り/書き込みモードで開きます。ファイルは存在している必要があります。
rb は、読み取りおよび書き込み用にバイナリ ファイルを開き、データを読み取ることができるようにします。
rw 読み取りと書き込み テキスト ファイルを開き、読み取りと書き込みを可能にします。
w 書き込み専用ファイルを開きます。ファイルが存在する場合、ファイル長は 0 にクリアされ、ファイルの内容は消去されます。ファイルが存在しない場合は、ファイルを作成します。
w 読み取りおよび書き込み可能なファイルを開きます。ファイルが存在する場合、ファイルの長さはゼロにクリアされます。つまり、ファイルの内容は消去されます。ファイルが存在しない場合は、ファイルを作成します。
a 書き込み専用ファイルを追加モードで開きます。ファイルが存在しない場合はファイルが作成され、ファイルが存在する場合は書き込まれたデータがファイルの末尾に追加され、ファイルの元の内容が保持されます。 (EOF 文字は予約済み)
wb 書き込み専用の新しいバイナリ ファイルを開くか作成します。データ書き込みのみが許可されます。
wb 読み取りおよび書き込み バイナリ ファイルを開くか作成して、読み取りと書き込みを可能にします。
wt 読み取りと書き込み用にテキスト ファイルを開くか作成します。読み取りと書き込みは許可されます。
at は、読み取りおよび書き込み用にテキスト ファイルを開き、テキストの末尾にデータを読み取りまたは追加できるようにします。
ab は、読み取りおよび書き込み用にバイナリ ファイルを開き、ファイルの末尾にデータを読み取りまたは追加できるようにします。
上記の形式文字列には、rb、w b、ab などの b 文字を追加できます。 b 文字は、開かれたファイルがプレーン テキスト ファイルではなくバイナリ ファイルであることを関数ライブラリに伝えるために追加されます。 。
戻り値: ファイルが正常にオープンされると、ストリームを指すファイル ポインターが返されます。ファイルのオープンに失敗した場合は、NULL が返され、エラーコードが errno に格納されます。
2.ルーチン:
1
2
3
4
5
6
###7###
89
10
11
12
####含む######
#F_PATH "d:\\myfile\\file.dat"を定義します文字;
intmain(){
FILE*fp=NULL; //注意が必要です
fp=fopen(F_PATH,"r");
if(NULL==fp) return-1; //エラーコードを返す場合
while(fscanf(fp,"%c",&c)!=EOF) printf("%c",c); //テキストから読み取ってコンソールに出力します
fclose(fp);
fp=NULL; //null を指す必要があります。そうでない場合は、元の開いたファイル アドレスを指すことになります
return0;
}
最も簡単な方法は、1 行ずつ読み取り、必要なデータのみを取得することです。以下は私が書いた簡単な例ですが、賞品を 3 回引きましたが、重複はありませんでした。
####含む ###### ####含む ###### ####含む #######define PEOPLE_NUM 10 //ファイルには 10 人の名前があります
int num;
fseek(fp, 0, SEEK_SET);
printf("開始...\n");
num = rand() % PEOPLE_NUM 1;
for(i = 0; i {
fgets(賞品名, 32, fp);
}
printf("%s が賞品を獲得します!!!\n", 賞品名);
}
int main()
{
FILE* fp = fopen("name.txt", "r");
int award_num;
int i;
文字賞品名[32] = {0};
srand(時間(0));
for(i = 0; i {
printf("\n");
get_prize(fp, 賞品名);
}
fclose(fp);
0を返す;
}ファイルは次のようになります:
スクリーンショットの実行:
この種のプログラムを作成する場合、プログラムが処理しやすいように、名前を保存するファイルをきちんと整理する必要があります。幸運を。
以上がC言語でファイルデータを構造体変数に代入する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。