/*Jantina[2] yang diberikan nampaknya tidak sesuai dengan 4 huruf. . . . . . Tetapi saya faham maksud soalan itu.
**Untuk memudahkan pengaturcaraan, saya menukar semua data dalam struktur ke dalam tatasusunan aksara Jika nombor diperlukan, tambahkan satu lagi langkah penukaran** Ia agak mudah dan saya tidak akan menulisnya , struktur digunakan dalam tatasusunan Badan program, jika anda tidak pasti berapa banyak baris yang terdapat dalam fail, untuk menjimatkan memori, anda boleh menggunakan peruntukan dinamik. Ia ditulis dengan tergesa-gesa, dan tiada fungsi yang terkandung, tetapi ia sememangnya boleh digunakan, jadi lakukan sahaja~~~
*/
#include <...>
mempekerjakan arahan
{
id char[10];
nama char[10];
char seks[5];
umur char[5];
char edu[10];
gaji caj[5];
alamat char[20];
nombor aksara [20];
};
int _tmain(int argc, _TCHAR* argv[])
{
char buf[100];
FAIL* pf=NULL;
struct employ Ep[10]={};
int bendera=0;
pf=fopen("employ.dat","r");
jika(!pf)
{
printf("Pembukaan fail gagal! n");
sistem("jeda");
kembali -1;
}
sementara(fgets(buf,99,pf))
{
char* pchar=buf;
untuk(int i=0;i
{
Ep[bendera].id[i]=*pchar;
jika(*pchar++==',')
rehat;
}
untuk(int i=0;i
{
Ep[bendera].nama[i]=*pchar;
jika(*pchar++==',')
rehat;
}
untuk(int i=0;i
{
Ep[bendera].seks[i]=*pchar;
jika(*pchar++==',')
rehat;
}
untuk(int i=0;i
{
Ep[bendera].umur[i]=*pchar;
jika(*pchar++==',')
rehat;
}
untuk(int i=0;i
{
Ep[flag].edu[i]=*pchar;
jika(*pchar++==',')
rehat;
}
untuk(int i=0;i
{
Ep[bendera].gaji[i]=*pchar;
jika(*pchar++==',')
rehat;
}
untuk(int i=0;i
{
Ep[bendera].alamat[i]=*pchar;
jika(*pchar++==',')
rehat;
}
untuk(int i=0;i
{
Ep[bendera].nombor[i]=*pchar;
jika(!*pchar++)
rehat;
}
//printf("%s",buf);
++bendera;
}
fclose(pf);
sistem("jeda");
kembali 0;
}
Gunakan fungsi fopen dan fscanf untuk membaca kandungan daripada fail txt dan melakukan operasi mudah.
1.Prototaip fungsi Fopen: FAIL * fopen(const char * path, const char * mod);
Parameter pertama fungsi fopen ialah laluan fail, dan parameter kedua ialah kaedah pembukaan. Terdapat kaedah berikut:
r Buka fail dalam mod baca sahaja, fail mesti wujud.
r+ membuka fail untuk membaca dan menulis, fail mesti wujud.
rb+ membuka fail binari untuk membaca dan menulis, membolehkan data dibaca.
rw+ baca-tulis membuka fail teks, membenarkan membaca dan menulis.
w Buka fail tulis sahaja Jika fail itu wujud, panjang fail akan dikosongkan kepada 0, iaitu kandungan fail akan hilang. Jika fail itu tidak wujud, buat fail tersebut.
w+ membuka fail yang boleh dibaca dan boleh ditulis Jika fail itu wujud, panjang fail akan dikosongkan kepada sifar, iaitu kandungan fail akan hilang. Jika fail itu tidak wujud, buat fail tersebut.
a Buka fail tulis sahaja dalam mod tambah. Jika fail tidak wujud, fail akan dibuat Jika fail wujud, data bertulis akan ditambah pada penghujung fail, iaitu kandungan asal fail akan dikekalkan. (Watak EOF dikhaskan)
a+ Buka fail baca-tulis dalam mod tambah. Jika fail tidak wujud, fail akan dibuat Jika fail wujud, data bertulis akan ditambah pada penghujung fail, iaitu kandungan asal fail akan dikekalkan. (Simbol EOF asal tidak dikekalkan)
wb Buka atau buat fail binari baharu untuk menulis sahaja;
wb+ baca-tulis membuka atau mencipta fail binari, membenarkan membaca dan menulis.
wt+ Baca dan tulis Buka atau buat fail teks membolehkan membaca dan menulis.
at+ membuka fail teks untuk membaca dan menulis, membenarkan membaca atau menambahkan data pada penghujung teks.
ab+ membuka fail binari untuk membaca dan menulis, membenarkan membaca atau menambahkan data ke penghujung fail.
Rentetan morfologi di atas boleh ditambah dengan aksara b, seperti rb, w+b atau ab+ dan kombinasi lain Aksara b ditambah untuk memberitahu perpustakaan fungsi bahawa fail yang dibuka ialah fail binari, bukan fail teks tulen.
Nilai pulangan: Selepas fail berjaya dibuka, penuding fail yang menghala ke strim akan dikembalikan. Jika pembukaan fail gagal, NULL dikembalikan dan kod ralat disimpan dalam errno.
2
12
3
4
5
6
7
8
9
10
11
12
#include
charc;
intmain(){
FILE*fp=NULL; //Perlu ambil perhatian
fp=fopen(F_PATH,"r");
if(NULL==fp) return-1; //Untuk mengembalikan kod ralat
while(fscanf(fp,"%c",&c)!=EOF) printf("%c",c); //Baca daripada teks dan cetak pada konsol
fclose(fp);
fp=NULL; //Perlu menunjuk ke null, jika tidak, ia akan menunjuk ke alamat fail asal yang dibuka
kembali0;
}
Kaedah paling mudah ialah membaca baris demi baris, tetapi hanya dapatkan baris data yang anda mahukan. Di bawah adalah contoh mudah yang saya tulis. Saya cabutan hadiah sebanyak tiga kali dan tidak ada pendua.
#include
#include
#include
#define PEOPLE_NUM 10 //Terdapat 10 nama dalam fail saya
batal dapatkan_hadiah(FAIL* fp, char prize_name[])
{
int num;
int i;
fseek(fp, 0, SEEK_SET);
printf("mula...n");
bilangan = rand() % ORANG_NUM + 1;
untuk(i = 0; i
{
fgets(nama_hadiah, 32, fp);
}
printf("%s dapat hadiah!!!n", nama_hadiah);
}
int main()
{
FAIL* fp = fopen("name.txt", "r");
nombor_hadiah masuk;
int i;
nama_hadiah char[32] = {0};
srand(masa(0));
untuk(i = 0; i
{
printf("n");
dapatkan_hadiah(fp, nama_hadiah);
}
fclose(fp);
kembali 0;
}Fail kelihatan seperti ini:
Tangkapan skrin berjalan:
Semasa menulis program sebegini, fail tempat anda menyimpan nama mesti disusun dengan kemas supaya program dapat memprosesnya dengan mudah. semoga berjaya.
Atas ialah kandungan terperinci Bagaimana untuk menetapkan data fail kepada pembolehubah struktur dalam bahasa C. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!