/*주어진 성별[2]은 4글자가 맞지 않는 것 같습니다. . . . . . 그러나 질문의 의미는 분명합니다.
**프로그래밍을 단순화하기 위해 구조의 모든 데이터를 문자 배열로 변경했습니다. 숫자가 필요한 경우 변환 단계를 추가하면 됩니다**. , 프로그램 Body 배열에 구조가 사용됩니다. 파일에 몇 줄이 있는지 확실하지 않은 경우 메모리를 절약하기 위해 동적 할당을 사용할 수 있습니다. 급하게 쓴 글이고 캡슐화된 기능도 없지만 그래도 쓸만하니 그냥 하세요~~~
*/
#포함 <...>
고용구조
{
문자 ID[10];
문자 이름[10];
캐릭터 섹스[5];
문자 연령[5];
char edu[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;
}
동안(fgets(buf,99,pf))
{
char* pchar=buf;
for(int i=0;i
{
Ep[flag].id[i]=*pchar;
if(*pchar++==',')
휴식;
}
for(int i=0;i
{
Ep[flag].name[i]=*pchar;
if(*pchar++==',')
휴식;
}
for(int i=0;i
{
Ep[flag].sex[i]=*pchar;
if(*pchar++==',')
휴식;
}
for(int i=0;i
{
Ep[flag].age[i]=*pchar;
if(*pchar++==',')
휴식;
}
for(int i=0;i
{
Ep[flag].edu[i]=*pchar;
if(*pchar++==',')
휴식;
}
for(int i=0;i
{
Ep[flag].wage[i]=*pchar;
if(*pchar++==',')
휴식;
}
for(int i=0;i
{
Ep[flag].address[i]=*pchar;
if(*pchar++==',')
휴식;
}
for(int i=0;i
{
Ep[플래그].번호[i]=*pchar;
if(!*pchar++)
휴식;
}
//printf("%s",buf);
++플래그;
}
fclose(pf);
system("일시중지");
0을 반환합니다;
}
fopen 및 fscanf 기능을 사용하여 txt 파일의 내용을 읽고 간단한 작업을 수행합니다.
1.Fopen 함수 프로토타입: FILE * fopen(const char * path, const char * mode);
fopen 함수의 첫 번째 매개변수는 파일 경로이고, 두 번째 매개변수는 열기 방법입니다.
r 파일을 읽기 전용 모드로 열면 파일이 존재해야 합니다.
r+는 읽고 쓰기 위해 파일을 엽니다. 파일이 존재해야 합니다.
rb+는 읽고 쓰기 위해 바이너리 파일을 열어 데이터를 읽을 수 있도록 합니다.
rw+ 읽기-쓰기는 텍스트 파일을 열어 읽고 쓸 수 있습니다.
w 쓰기 전용 파일을 엽니다. 파일이 존재하면 파일 길이가 0으로 지워집니다. 즉, 파일 내용이 사라집니다. 파일이 존재하지 않으면 파일을 생성하십시오.
w+는 읽기 및 쓰기 가능한 파일을 엽니다. 파일이 존재하면 파일 길이가 0으로 지워집니다. 즉, 파일 내용이 사라집니다. 파일이 존재하지 않으면 파일을 생성하십시오.
a 쓰기 전용 파일을 추가 모드로 엽니다. 파일이 없으면 파일이 생성됩니다. 파일이 있으면 작성된 데이터가 파일 끝에 추가됩니다. 즉, 파일의 원래 내용이 유지됩니다. (EOF 문자 예약됨)
a+ 추가 모드에서 읽기-쓰기 파일을 엽니다. 파일이 없으면 파일이 생성됩니다. 파일이 있으면 작성된 데이터가 파일 끝에 추가됩니다. 즉, 파일의 원래 내용이 유지됩니다. (원래 EOF 기호는 유지되지 않습니다)
wb 쓰기 전용으로 새 바이너리 파일을 열거나 생성합니다. 데이터 쓰기만 허용됩니다.
wb+ 읽기-쓰기는 바이너리 파일을 열거나 생성하여 읽고 쓸 수 있습니다.
wt+ 읽기 및 쓰기 텍스트 파일을 열거나 생성하여 읽고 쓸 수 있습니다.
at+는 읽고 쓰기 위해 텍스트 파일을 열어 텍스트 끝에 데이터를 읽거나 추가할 수 있습니다.
ab+는 읽고 쓰기 위해 바이너리 파일을 열어 파일 끝에 데이터를 읽거나 추가할 수 있습니다.
위의 형태학적 문자열은 b 문자(예: rb, w+b 또는 ab+ 및 기타 조합)를 추가하여 열린 파일이 순수 텍스트 파일이 아닌 바이너리 파일임을 함수 라이브러리에 알리기 위해 추가될 수 있습니다.
반환 값: 파일이 성공적으로 열린 후 스트림을 가리키는 파일 포인터가 반환됩니다. 파일 열기에 실패하면 NULL이 반환되고 오류 코드가 errno에 저장됩니다.
2. 루틴:
1
2
3
4
5
6
7
8
9
10
11
12
#포함
#define 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;
}
가장 간단한 방법은 한 줄씩 읽으면서 원하는 데이터 줄만 가져오는 것입니다. 아래는 제가 작성한 간단한 예시입니다. 상품을 세 번 뽑았는데 중복이 없었습니다.
#포함
#포함
#포함
#define PEOPLE_NUM 10 //내 파일에 이름이 10개 있습니다
void get_prize(FILE* fp, char Prize_name[])
{
int 숫자;
그래요;
fseek(fp, 0, SEEK_SET);
printf("시작...n");
num = rand() % PEOPLE_NUM + 1;
for(i = 0; i
{
fgets(prize_name, 32, fp);
}
printf("%s님이 상품을 받았습니다!!!n", Prize_name);
}
int 메인()
{
파일* fp = fopen("name.txt", "r");
int Prize_num;
그래요;
char 상품_이름[32] = {0};
srand(시간(0));
for(i = 0; i
{
printf("n");
get_prize(fp, 상품_이름);
}
fclose(fp);
0을 반환합니다;
}파일은 다음과 같습니다.
실행 중인 스크린샷:
이런 종류의 프로그램을 작성할 때 이름을 저장하는 파일은 프로그램이 쉽게 처리할 수 있도록 깔끔하게 정리되어야 합니다. 행운을 빌어요.
위 내용은 C 언어에서 구조 변수에 파일 데이터를 할당하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!