Ошибка при вводе данных в программу - C (СИ)
Формулировка задачи:
помогите, пжлста, ошибка при выводе(прога читает и выводит записи+создает новые)
возможно из-за klient[N] спасибо
#include<stdio.h>
#include<stdlib.h>
#define N 15
struct salon
{char usluga[7],imja[6],familija[7],data[10];
float summa;
}klient[N];
int main()
{
FILE*in;
unsigned int dlina;
int i,kolvo;
in=fopen("klient.txt","r");
if (in==NULL)
{printf ("nevozmowno otkritj fail.txt\n");
system("pause");
exit(1);
};
for (i=0;i<N;i++){
fscanf(in,"%s%s%s%s%f",klient[i].usluga,klient[i].imja,klient[i].familija,klient[i].data,&klient[i].summa);
}
printf ("dannie o klientah:\n");
for(i=0;i<N;++i)
{printf("%10s %9s %15s %15s %6.2f \n",klient[i].usluga,klient[i].imja,klient[i].familija,klient[i].data,klient[i].summa);
}
//-----------------------------------------vivod dannih---------------------------------------------//
printf("vvedite dannie\n");
int k;
printf("skoljko zapisej sdelatj?");
scanf("%i",&k);
for(i=N;i<N+k;++i);
{
printf("usluga: ");
gets(klient[i].usluga);
printf("imja: ");
gets(klient[i].imja);
printf("familija: ");
gets(klient[i].familija);
printf("data: ");
gets(klient[i].data);
printf("summa: ");
scanf("%f",&klient[i].summa);
}
for(i=0;i<N+k;++i)
{printf("%10s %9s %15s %15s %6.2f \n",klient[i].usluga,klient[i].imja,klient[i].familija,klient[i].data,&klient[i].summa);
}
fclose(in);
system("pause");
return 0;
}Решение задачи: «Ошибка при вводе данных в программу»
textual
Листинг программы
#include<stdio.h>
#define N 15
struct salon {
char usluga[100],
imja[100],
familija[100],
data[11];
float summa;
} klient[N];
int main(void)
{
FILE *in;
int n, i, k;
in = fopen("klient.txt", "r");
if (in == NULL) {
fprintf(stderr, "error: nevozmowno otkritj fail.txt\n");
getchar();
return 1;
}
n = 0;
while(
fscanf(in, "%s%s%s%s%f",
klient[n].usluga,
klient[n].imja,
klient[n].familija,
klient[n].data,
&klient[n].summa) == 5 && n < N)
n++;
printf("dannie o klientah:\n");
for (i = 0; i < n; i++)
printf("%10s %9s %15s %15s %6.2f\n",
klient[i].usluga,
klient[i].imja,
klient[i].familija,
klient[i].data,
klient[i].summa);
/*----------vivod dannih----------*/
printf("vvedite dannie\n");
printf("skoljko zapisej sdelatj? ");
if (scanf("%d%*c", &k) != 1) {
fprintf(stderr, "error: incorrect input");
return 1;
}
if (n + k > N) {
fprintf(stderr, "error: number is too big, maximum is %d\n", N - n);
return 1;
}
for (i = n; i < n + k; i++) {
printf("usluga: ");
fflush(stdout);
scanf("%99[^\n]%*c", klient[i].usluga);
printf("imja: ");
fflush(stdout);
scanf("%99[^\n]%*c", klient[i].imja);
printf("familija: ");
fflush(stdout);
scanf("%99[^\n]%*c", klient[i].familija);
printf("data: ");
fflush(stdout);
scanf("%10[^\n]%*c", klient[i].data);
printf("summa: ");
fflush(stdout);
scanf("%f%*c", &klient[i].summa);
}
for (i = 0; i < n + k; i++)
printf("%10s %9s %15s %15s %6.2f\n",
klient[i].usluga,
klient[i].imja,
klient[i].familija,
klient[i].data,
klient[i].summa);
fclose(in);
getchar();
return 0;
}
Объяснение кода листинга программы
- Программа считывает данные из файла
klient.txtи выводит их на экран. - Пользователю предлагается ввести количество записей, которые необходимо добавить в файл.
- Если введенное количество записей превышает максимально допустимое значение (15), программа выдаст ошибку.
- Введенные данные сохраняются в структуре
salonи выводятся на экран. - Программа закрывает файл
klient.txtи ожидает нажатия любой клавиши. - Возвращаемое значение 0 указывает на успешное завершение программы.