Здравейте ! Имам малък проблем със една задачка на .С ...
В условието имам "Въвеждане имената и годините на група хора. Да се използва символен низ. След годините се въвежда запетая( с изключение на последния човек), както е показано в следния пример:
Георги 25, Ана 17, Иван 20, Петър 18
Програмата да е реализирана с меню и да реализира (чрез функции):
-въвеждане на данните от файл;
-извеждане на данните от файл;
-изчисляване на средната възраст на хората;
-извеждане на таблица с въведена информация и средната възраст на хората;
Георги 25
Ана 17
Иван 20
Петър____________ 18
Средна възраст 20.0
и горе долу я докарах до тук :
#include <stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include <windows.h>
//void data();
FILE *in(char *fname, int x);
int out(FILE *p, char *fname);
void tablica(FILE *p, char *fname);
int cursor(int z);
typedef struct
{ long int god;
char ime[20];
} hora;
void main()
{ char fname[30];
FILE *p;
//za Datata
int d,m,y;
int a,l;
nachalo:
system("cls");
printf("\n");
printf("---Molq vyvedete DATA!---\n");
printf("Den :");
scanf("%d",&d);
printf("Mesec :");
scanf("%d",&m);
printf("Godina :");
scanf("%d",&y);
fflush(stdin);
if (d<1||d>31||m<1||m>12||y<1800||y>2200)
{
system("cls");
printf("Vyvedenata Data e greshna!");
getchar();
goto nachalo;
}
if (d==29 && m==2)
if (y%4!=0 && y%100==0 || y%400!=0)
{ system("cls");
printf("Vyvedenata godina ne e visokosna!");
getchar();
goto nachalo;
}
system("cls");
printf("Ime na fail:"); gets(fname);
menu:
system("cls");
printf("%d.%d.%d",d,m,y);
printf("\n");
printf("\n");
printf("\n");
printf("--------------------------------------MENU--------------------------------------\n");
printf("__________________________________1.Nov zapis___________________________________\n");
printf("__________________________________2.Pokazvane na zapisite_______________________\n");
printf("__________________________________3.Izvejdane na zapisite v tablichen vid_______\n");
printf("__________________________________4.Izhod__________________________________
_____\n");
scanf("\n%d",&l);
fflush(stdin);
if (l<1 || l>4) goto menu;
p=fopen(fname,"r");
switch (l)
{
case 1: system("cls");
printf("\nVyvedete broi na horata:");
scanf("%d",&a);
p=in(fname,a);
if (p!=NULL) printf("Failyt e syzdaden!\n");
printf("Natisnete klavish!"); getchar(); goto menu;
break;
case 2: out (p,fname); getchar(); goto menu;
break;
case 3: tablica(p,fname); getchar(); goto menu;
}
}
FILE *in(char *fname, int x)
{ FILE *p;
hora s;
int i;
p=fopen(fname,"w");
if (p==NULL) printf("Failyt ne e syzdaden!");
fprintf(p,"%d\n",x);
system("cls");
for (i=0;i<x;i++)
{
printf("Ime "); gets(s.ime);
fflush(stdin);
printf("Godini:"); scanf("%ld",&s.god);
fflush(stdin);
// fflush(stdin);
fprintf(p,"%s%ld",s.ime,s.god);
}
fclose(p);
return(p);
}
int out(FILE *p, char *fname)
{ hora s;
int u,i;
p=fopen(fname,"r");
if (p==NULL)
printf("Failyt ne moje da se prochete!");
else
{
fscanf(p,"%d\n",&u);
system("cls");
for (i=0;i<u;i++)
{fscanf(p,"%s\n%ld",&s.ime,&s.god); //n
printf("\nIme:%sGodini:%ld",&s.ime,&s.god); //n
}
fclose(p);
}
return(1);
}
void tablica(FILE *p, char *fname)
{
hora s;
int u,i;
p=fopen(fname,"r");
if (p==NULL)
printf("Failyt ne moje da se prochete!");
else
fscanf(p,"%d\n",&u);
system("cls");printf("\n");
printf("N___Ime____________________God___________________________________________\n");
for (i=0;i<u;i++)
{fscanf(p,"%s%ld",&s.ime,&s.god);
printf("%d.__%ld_",i+1,s.ime,s.god);
cursor(i);
}
fclose(p);
}
int cursor(int z)
{
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
COORD position={49,z+5};
SetConsoleCursorPosition(hOut,position);
return(0);
}
.. и така знам,че е супер бъгава обаче това с низовете и въвеждането на 1 ред и то със запетайки ми е най големия проблем.....
Ако някой има свободно време и желание да ми помогне точно за тази част... мн ще съм му благодарна
.....
Мерси предварително на всички!!!