#include <stdio.h>
#include<conio.h>
#include<string.h>
struct abityrent{int nomer;char fio[50];char adres[50];char predmet[20]; int ocenka[1];} a1,styd ;
void cozdat (FILE*);
void prosmotr (FILE*);
void poisk (FILE*);
void exit (FILE*);
main()
{
char c;
FILE*nf;
while (1)
{clrscr();
puts("++++ меню ++++");
puts("1-создание");
puts("2-просмотра");
puts("3-поиск");
puts("0-выход");
c=getch();
switch(c)
{case '1':cozdat(nf); break;
case '2' :prosmotr(nf); break;
case '3' :poisk(nf); break;
case '0' :return 0;
defaults: puts("*неверный ввод ");
}
}
}
///////////////////////////////////////////////////////////////
void cozdat(FILE*nf)
{char ch;
nf=fopen("file.dat","wb");
clrscr();
printf("\n ввод абитуриентов\n");
do
{printf("\n-введите номер*:\n");
scanf("%d",a1.nomer);
printf("\n введите фио:\n");
scanf("%s",a1.fio);
printf ("\n-адрес*:\n");
scanf("%s",a1.adres);
printf ("\n предмет :\n");
scanf("%s", a1.predmet);
printf("\n оценка: \n");
scanf("%d",a1.ocenka);
fwrite(&a1, sizeof(a1),1,nf);
printf("\n закончить? д/н* \n");
ch=getch();
}
while(ch !='¤');
fclose(nf);
}
/////////////////////////////////////////////////////////////////////////
void prosmotr (FILE*nf)
{ int i;
clrscr();
nf=fopen("file1.dat","rb");
i=1;
fread(&a1, sizeof(a1),1,nf);
while(!feof(nf))
{printf("\n %d %s %s %s %d",i,a1.nomer,a1.fio,a1.adres,a1.predmet,a1.ocenka);
fread(&a1, sizeof(a1),1,nf);
i++;
}
fclose(nf);
getch();
}
////////////////////////////////////////////////////////////////////////////
void poisk(FILE*nf)
{int i;
clrscr();
a1=styd;
nf=fopen("file1.dat","rb");
printf("\n поиск хорошистов \n");
printf("\n введите предмет");
scanf("%s",a1.predmet);
for(i=0,i++;)
файл из структуры
Код:
Цитата:
В файле содержатся [COLOR="Red"]структуры[/COLOR][COLOR="Green"](или все таки данные?)[/COLOR] со сведениями об абитуриентах: № абитуриента, ФИО, адрес, название предмета, оценка. Вывести информацию об абитуриентах, получивших по заданному предмету положительные оценки.
Цитата: sopik
///////////////////////////////////////////////////////////////
void cozdat(FILE*nf)
{char ch;
nf=fopen("file.dat","wb");
clrscr();
printf("\n ввод абитуриентов\n");
do
{printf("\n-введите номер*:\n");
scanf("%d",[COLOR="Red"]&[/COLOR]a1.nomer);[COLOR="DarkGreen"]//тут ошибка[/COLOR]
printf("\n введите фио:\n");
scanf("%s",a1.fio);
printf ("\n-адрес*:\n");
scanf("%s",a1.adres);
printf ("\n предмет :\n");
scanf("%s", a1.predmet);
printf("\n оценка: \n");
scanf("%d",[COLOR="Red"]&[/COLOR]a1.ocenka);[COLOR="DarkGreen"]//тут ошибка[/COLOR]
fwrite(&a1, sizeof(a1),1,nf);
printf("\n закончить? д/н* \n");
ch=getch();
}
while(ch !='¤');
fclose(nf);
}
/////////////////////////////////////////////////////////////////////////
Попробуй так:)
стркутуры, и насчет массива можно поконкретнее.........?
Код:
struct my
{
int num;
};
int main()
{
my *mas;
/*находи число записей в файле*/
int idx=0;
mas=new my[число записей в файле];// выделяй память
fscanf(указатель на файл,"%d",mas[idx].num);
while(!feof(указатель на файл) && idx<число записей в файле)
{
idx++;
mas=new my[число записей в файле];
fscanf(указатель на файл,"%d",mas[idx].num);
}
return 0;
}
/*ищим че там надо*/
for(idx=0;idx<число записей в файле;idx++)
if(mas[idx].num==0)cout<<mas[idx].num;
{
int num;
};
int main()
{
my *mas;
/*находи число записей в файле*/
int idx=0;
mas=new my[число записей в файле];// выделяй память
fscanf(указатель на файл,"%d",mas[idx].num);
while(!feof(указатель на файл) && idx<число записей в файле)
{
idx++;
mas=new my[число записей в файле];
fscanf(указатель на файл,"%d",mas[idx].num);
}
return 0;
}
/*ищим че там надо*/
for(idx=0;idx<число записей в файле;idx++)
if(mas[idx].num==0)cout<<mas[idx].num;
Конечно лучше использовать списки, с ними быстрее, но сложнее.
ЗЫ Ты загляни чего там в файл занеслось :)
спасибо за совет
Код:
#include <stdio.h>
#include<conio.h>
#include<string.h>
struct abityrent{int nomer;char fio[50];char adres[50];char predmet[20]; int ocenka;} a1,styd ;
void cozdat (FILE*);
void prosmotr (FILE*);
void poisk (FILE*);
void exit (FILE*);
main()
{
char c;
FILE*nf;
while (1)
{clrscr();
puts("++++ меню ++++");
puts("1-создать");
puts("2-посмотреть");
puts("3-поиск");
puts("0-выход");
c=getch();
switch(c)
{case '1':cozdat(nf); break;
case '2' :prosmotr(nf); break;
case '3' :poisk(nf); break;
case '0' :return 0;
defaults: puts("*неверный ввод");
}
}
}
///////////////////////////////////////////////////////////////
void cozdat(FILE*nf)
{char ch;
nf=fopen("file1.dat","wb");
clrscr();
printf("\n ввод абитуриентов\n");
do
{printf("\n номер*:\n");
scanf("%d",&a1.nomer);
printf("\n фио:\n");
scanf("%s",a1.fio);
printf ("\n-адрес*:\n");
scanf("%s",a1.adres);
printf ("\n предмет :\n");
scanf("%s", a1.predmet);
printf("\n оценка: \n");
scanf("%d",&a1.ocenka);
fwrite(&a1, sizeof(a1),1,nf);
printf("\n закончить? д/н* \n");
ch=getch();
}
while(ch !='д');
fclose(nf);
}
/////////////////////////////////////////////////////////////////////////
void prosmotr (FILE*nf)
{
clrscr();
nf=fopen("file1.dat","rb");
{fread(&a1, sizeof(a1),1,nf);
while(!feof(nf))
{printf("\n %d %s %s %s %d",a1.nomer,a1.fio,a1.adres,a1.predmet,a1.ocenka);
fread(&a1, sizeof(a1),1,nf);
}
fclose(nf);
getch();
}
}
///////////////////////////////////////////////////////////////////////////
void poisk(FILE*nf)
{
clrscr();
nf=fopen("file1.dat","rb");
if feof(nf)
{
puts("*нет данных");
}
else
{
fread(&a1,sizeof(a1),1,nf);
styd=a1;
while(!feof(nf))
{
fread(&a1,sizeof(a1),1,nf);
if(styd.ocenka<3)
styd=a1;
}
puts("студенты с положительными оценками л:");
printf("\n %d %s %s %s %d",styd.nomer, styd.fio, styd.adres,styd.predmet, styd.ocenka);
}
fclose(nf);
getch();
В этом виде все работает, в пункте poisk выполняется абитуриента с оценкой больше или равной 3
мне нужно реализовать поиск всех абитуриентов с оценками выше 3 по заданному предмету. Подскажите как подправить?
}
#include<conio.h>
#include<string.h>
struct abityrent{int nomer;char fio[50];char adres[50];char predmet[20]; int ocenka;} a1,styd ;
void cozdat (FILE*);
void prosmotr (FILE*);
void poisk (FILE*);
void exit (FILE*);
main()
{
char c;
FILE*nf;
while (1)
{clrscr();
puts("++++ меню ++++");
puts("1-создать");
puts("2-посмотреть");
puts("3-поиск");
puts("0-выход");
c=getch();
switch(c)
{case '1':cozdat(nf); break;
case '2' :prosmotr(nf); break;
case '3' :poisk(nf); break;
case '0' :return 0;
defaults: puts("*неверный ввод");
}
}
}
///////////////////////////////////////////////////////////////
void cozdat(FILE*nf)
{char ch;
nf=fopen("file1.dat","wb");
clrscr();
printf("\n ввод абитуриентов\n");
do
{printf("\n номер*:\n");
scanf("%d",&a1.nomer);
printf("\n фио:\n");
scanf("%s",a1.fio);
printf ("\n-адрес*:\n");
scanf("%s",a1.adres);
printf ("\n предмет :\n");
scanf("%s", a1.predmet);
printf("\n оценка: \n");
scanf("%d",&a1.ocenka);
fwrite(&a1, sizeof(a1),1,nf);
printf("\n закончить? д/н* \n");
ch=getch();
}
while(ch !='д');
fclose(nf);
}
/////////////////////////////////////////////////////////////////////////
void prosmotr (FILE*nf)
{
clrscr();
nf=fopen("file1.dat","rb");
{fread(&a1, sizeof(a1),1,nf);
while(!feof(nf))
{printf("\n %d %s %s %s %d",a1.nomer,a1.fio,a1.adres,a1.predmet,a1.ocenka);
fread(&a1, sizeof(a1),1,nf);
}
fclose(nf);
getch();
}
}
///////////////////////////////////////////////////////////////////////////
void poisk(FILE*nf)
{
clrscr();
nf=fopen("file1.dat","rb");
if feof(nf)
{
puts("*нет данных");
}
else
{
fread(&a1,sizeof(a1),1,nf);
styd=a1;
while(!feof(nf))
{
fread(&a1,sizeof(a1),1,nf);
if(styd.ocenka<3)
styd=a1;
}
puts("студенты с положительными оценками л:");
printf("\n %d %s %s %s %d",styd.nomer, styd.fio, styd.adres,styd.predmet, styd.ocenka);
}
fclose(nf);
getch();
В этом виде все работает, в пункте poisk выполняется абитуриента с оценкой больше или равной 3
мне нужно реализовать поиск всех абитуриентов с оценками выше 3 по заданному предмету. Подскажите как подправить?
}
Код:
fread(&a1,sizeof(a1),1,nf);
while(!feof(nf))
{
if(nf.ocenka>3)cout<<nf.nomer<<" "<<nf.fio<<" "<<nf.adres<<" "<<nf.predmet<<" "<<nf.ocenka<<endl;
fread(&a1,sizeof(a1),1,nf);
}
while(!feof(nf))
{
if(nf.ocenka>3)cout<<nf.nomer<<" "<<nf.fio<<" "<<nf.adres<<" "<<nf.predmet<<" "<<nf.ocenka<<endl;
fread(&a1,sizeof(a1),1,nf);
}
У меня так проще получилось:
Код:
#include<iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
struct stud
{
char fio[30],adres[30],pred[30];
int nomer,mark;
};
int main(int argc, char *argv[])
{
FILE *in;
stud buf1;
in=fopen("file.dat","wb");
cout<<"Student Input:"<<endl;
char symbol1;
do
{
cout<<"Input number: ";
cin>>buf1.nomer;
cout<<"Input FIO: ";
cin>>buf1.fio;
cout<<"Input Adres: ";
cin>>buf1.adres;
cout<<"Input class: ";
cin>>buf1.pred;
cout<<"Input mark: ";
cin>>buf1.mark;
fwrite(&buf1,sizeof(buf1),1,in);
cout<<"Input another data?(y/n): ";
cin>>symbol1;
}
while(symbol1=='y');
fclose(in);
in=fopen("file.dat","rb");
cout<<"DATA:"<<endl;
fread(&buf1,sizeof(buf1),1,in);
while(!feof(in))
{
cout<<buf1.nomer<<" "<<buf1.fio<<" "<<buf1.adres<<" "<<buf1.pred<<" "<<buf1.mark<<endl;
fread(&buf1,sizeof(buf1),1,in);
}
rewind(in);
cout<<"Poisk 4 and 5:"<<endl;
fread(&buf1,sizeof(buf1),1,in);
while(!feof(in))
{
if(buf1.mark>3)cout<<buf1.nomer<<" "<<buf1.fio<<" "<<buf1.adres<<" "<<buf1.pred<<" "<<buf1.mark<<endl;
fread(&buf1,sizeof(buf1),1,in);
}
return 0;
}
#include<cstring>
#include<stdio.h>
using namespace std;
struct stud
{
char fio[30],adres[30],pred[30];
int nomer,mark;
};
int main(int argc, char *argv[])
{
FILE *in;
stud buf1;
in=fopen("file.dat","wb");
cout<<"Student Input:"<<endl;
char symbol1;
do
{
cout<<"Input number: ";
cin>>buf1.nomer;
cout<<"Input FIO: ";
cin>>buf1.fio;
cout<<"Input Adres: ";
cin>>buf1.adres;
cout<<"Input class: ";
cin>>buf1.pred;
cout<<"Input mark: ";
cin>>buf1.mark;
fwrite(&buf1,sizeof(buf1),1,in);
cout<<"Input another data?(y/n): ";
cin>>symbol1;
}
while(symbol1=='y');
fclose(in);
in=fopen("file.dat","rb");
cout<<"DATA:"<<endl;
fread(&buf1,sizeof(buf1),1,in);
while(!feof(in))
{
cout<<buf1.nomer<<" "<<buf1.fio<<" "<<buf1.adres<<" "<<buf1.pred<<" "<<buf1.mark<<endl;
fread(&buf1,sizeof(buf1),1,in);
}
rewind(in);
cout<<"Poisk 4 and 5:"<<endl;
fread(&buf1,sizeof(buf1),1,in);
while(!feof(in))
{
if(buf1.mark>3)cout<<buf1.nomer<<" "<<buf1.fio<<" "<<buf1.adres<<" "<<buf1.pred<<" "<<buf1.mark<<endl;
fread(&buf1,sizeof(buf1),1,in);
}
return 0;
}
Лог программы:
Код:
Student Input:
Input number: 1
Input FIO: lev
Input Adres: moscow
Input class: history
Input mark: 4
Input another data?(y/n): y
Input number: 2
Input FIO: lopata
Input Adres: lipeck
Input class: russian
Input mark: 3
Input another data?(y/n): y
Input number: 3
Input FIO: gogol
Input Adres: kiev
Input class: english
Input mark: 5
Input another data?(y/n): n
DATA:
1 lev moscow history 4
2 lopata lipeck russian 3
3 gogol kiev english 5
Poisk 4 and 5:
1 lev moscow history 4
3 gogol kiev english 5
Input number: 1
Input FIO: lev
Input Adres: moscow
Input class: history
Input mark: 4
Input another data?(y/n): y
Input number: 2
Input FIO: lopata
Input Adres: lipeck
Input class: russian
Input mark: 3
Input another data?(y/n): y
Input number: 3
Input FIO: gogol
Input Adres: kiev
Input class: english
Input mark: 5
Input another data?(y/n): n
DATA:
1 lev moscow history 4
2 lopata lipeck russian 3
3 gogol kiev english 5
Poisk 4 and 5:
1 lev moscow history 4
3 gogol kiev english 5
спасибо