Консультация № 144828
24.09.2008, 00:04
0.00 руб.
0 2 1
Здравствуйте! Помогите пожалуйста разобраться с таблицами в Си. Задание: "Оплата телефонных услуг. В таблице: номер абонента; сумма, которую он должен заплатить, без детализации счета и дата ликвидации долга. Таблица упорядочена по номерам телефонов. Выдать предупреждение всем абонентам, у которых срок ликвидации долга истек."
Программу я написал (текст в приложении), но она что-то работать не хочет, с поиском ошибок проблемы. Заранее спасибо.

Приложение:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define N 20
#define M 20

struct abonent {
int telephone_number;
int summa;
int date_of_liquidation;
};

struct table1 {
struct abonent S[N];
int n;
} T;

struct prevention {
int date_of_liquidation;
};

struct table2 {
struct prevention Q[M];
int m;
} P;

void main() {
int number, nom, f=0;
FILE *f1, *f2;
f1 = fopen("C:/Abonent.txt", "r");
if (f1 == 0) {printf("No open!\n");}
f2 = fopen("C:/Prevention.txt", "r");
if (f2 == 0) {printf("No open!\n");}

fscanf(f1, "%i %i %i", &T.S[0].telephone_number, T.S[0].summa, T.S[0].date_of_liquidation);
T.n=1;
while (!feof(f1)) {
fscanf(f1, "%i", &number);
for(int i=0, f=0;i<T.n&&f!=1;i++) {
if(number<T.S[i].telephone_number) {
for(int j=T.n; j>=i;j--) {
T.S[j+1].telephone_number=T.S[j].telephone_number;
strcpy(T.S[j+1].summa, T.S[j].summa);
strcpy(T.S[j+1].date_of_liquidation, T.S[j].date_of_liquidation);
}
T.S[j+1].telephone_number=number;
fscanf(f1, "%i %i", T.S[j+1].summa, T.S[j+1].date_of_liquidation);
T.n=T.n+1;
f=1;
}
}
if(f!=1) {
T.S[i].telephone_number=number;
fscanf(f1, "%i %i", T.S[i].summa, T.S[i].date_of_liquidation);
T.n=T.n+1;
}
}

fclose(f1);
while (!feof(f2)) {
fscanf(f2, "%i", &nom);
for(int f=0; f<T.n; f++) {
if(nom==T.S[f].telephone_number) {
for(int k=f; k<T.n-1;k++) {
T.S[k].telephone_number=T.S[k+1].telephone_number;
strcpy(T.S[k].summa, T.S[k+1].summa);
strcpy(T.S[k].date_of_liquidation, T.S[k+1].date_of_liquidation);
}
T.n=T.n-1;
}
}
}
for(int c=0;c<T.n; c++) {
printf ("\n%i %i %i", T.S[c].telephone_number, T.S[c].summa, T.S[c].date_of_liquidation);
}

fclose(f2);
getchar();
}

Обсуждение

Неизвестный
24.09.2008, 00:36
общий
это ответ
Здравствуйте, Chaos!
разобраться в представленной вами мешанине нет возможности, к то му же отсутствуют файлы, которые вы читаете,
что сразу бросилось в глаза это некорректное использование scanf:
fscanf(f1, "%i %i %i", &T.S[0].telephone_number, T.S[0].summa, T.S[0].date_of_liquidation);
передавать надо адреса переменных, т.е. вот так:
fscanf(f1, "%i %i %i", &T.S[0].telephone_number, &T.S[0].summa, &T.S[0].date_of_liquidation);
тоже самое: не
fscanf(f1, "%i %i", T.S[j+1].summa, T.S[j+1].date_of_liquidation);
а
fscanf(f1, "%i %i", &T.S[j+1].summa, &T.S[j+1].date_of_liquidation);
может еще где есть, не найти

и очень не красиво, что нет конструкторов у объектов, это опасная привычка.
Неизвестный
24.09.2008, 11:24
общий
Спасибо. Эти ошибки я както не заметил, постараюсь и остальные найти. Я еще только учусь и представления как красиво писать текст программы пока не имею. Возможно существую какие-нибудь стандарты?
Форма ответа