Автор Тема: Помогите пжт понять\исправить. В чем проблема?  (Прочитано 2171 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Millenia

  • Пользователь
  • **
  • Сообщений: 44
    • Просмотр профиля
#include <stdio.h>   
#include <string.h>   
#include <conio.h>
#include "altconio.h"
#include <string.h>
 
struct abiturient{
       char school[50];
       char year[50];
       char high_sc[50];
       int sr_ball;
       int nom;} a[100];
   
int input (FILE *file, struct abiturient *a) {
    clrscr();
    int n, i;
    printf ("Введите количество записей: ");
    scanf ("%d", &n); 
    clrscr(); 
    file = fopen("~$Temp.txt", "wt");
     for (i=0; i<n; i++){
        a[i].nom = i+1;
        fprintf(file, "%d\n", a[i].nom);
        printf("№ %d",a[i].nom);
       
        printf (" Введите школу: ");
        scanf ("%s", &a[i].school);
        fprintf(file, "%s\n", &a[i].school);
       
        printf ("Введите год окончания школы: ");
        scanf ("%s", &a[i].year);
        fprintf(file, "%s\n", &a[i].year);
       
        printf ("Введите ВУЗ поступления: ");
        scanf ("%s", &a[i].high_sc);
        fprintf(file, "%s\n", &a[i].high_sc);
       
        printf ("Введите средний бал аттестата: ");
        scanf ("%d", &a[i].sr_ball);
        fprintf(file, "%s\n", &a[i].sr_ball);
        clrscr();}       
        fclose(file);
        return (n);}
   
void read (FILE *file){
     file = fopen("~$Temp.txt", "rt");
     int i = 0;
     while ( !feof(file) ){
             fscanf(file, "%d", &a[i].nom);         
             fscanf(file, "%s", &a[i].school);
             fscanf(file, "%s", &a[i].year);
             fscanf(file, "%s", &a[i].high_sc);
             fscanf(file, "%d", &a[i].sr_ball); 
     i++;}
    fclose(file);}
 
void output(FILE *file, struct abiturient *a, int n){
    clrscr();
    printf("Cодержимое файла: ");
 
    file = fopen("~$Temp.txt", "rt");
    int i = 0;   
    read(file);   
    while (i < n){   
        printf("\n № %d", a[i].nom);
        printf("\n Школа: %s", a[i].school);
        printf("\n Год окончания школы: %s", a[i].year);
        printf("\n ВУЗ поступления: %s", a[i].high_sc);
        printf("\n Средний бал аттестата:  %d", a[i].sr_ball);   
        printf("\n");
        i++;}
    printf("\n");
    fclose(file);   
    system("pause");}
 
void search(struct abiturient *a, int n){
     clrscr();
     int b, c, d, buff, z = 0;
     char buf[100];
     printf("Принадлежность элемента файлу: ");
     scanf("%s", &buf);
     for(int i = 0; i < n; i++){
             b = stricmp(a[i].school, buf);
             c = stricmp(a[i].high_sc, buf);
             d = stricmp(a[i].year, buf);
             buff = atoi(buf);             
             if ((b == 0)||(c == 0)||(d == 0)||(a[i].sr_ball == buff)){
                printf("\n № %d", a[i].nom);
                printf("\n Школа: %s", a[i].school);
                printf("\n Год окончания школы: %s", a[i].year);
                printf("\n ВУЗ поступления: %s", a[i].high_sc);
                printf("\n Средний бал аттестата:  %d", a[i].sr_ball);
               break;}
             else z++;}
     if (z == n) printf("\n Введеное не принадлежит к файлу... ");
     system("pause");}
 
int add(FILE *file, struct abiturient *a, int n){
     clrscr();
     int k;
     int i = 0;     
     file = fopen("~$Temp.txt", "at");     
     printf("\n Добавление элемента в конец файла.");
     printf("\n Введите сколько элементов хотите добавить:  ");
     scanf("%d", &k);     
     for (; i<k; i++){
        a[i].nom = n + i+1;
        fprintf(file, "\n%d\n", a[i].nom);
        printf("\n № %d",a[i].nom);
         
        printf ("Введите школу: ");
        scanf ("%s", &a[i].school);
        fprintf(file, "%s\n", &a[i].school);
       
        printf ("Введите год окончания школы: ");
        scanf ("%s", &a[i].year);
        fprintf(file, "%s\n", &a[i].year);
       
        printf ("Введите ВУЗ поступления: ");
        scanf ("%s", &a[i].high_sc);
        fprintf(file, "%s\n", &a[i].high_sc);
       
        printf ("Введите средний бал аттестата: ");
        scanf ("%d", &a[i].sr_ball);
        fprintf(file, "%s\n", &a[i].sr_ball);}           
     fclose(file);
     return i;}
 
int delet(FILE *file, struct abiturient *a, int n){
     clrscr();
     output(file, a, n);
     int k = 0;
     printf("Введите № записи какую хотите удалить: ");
     scanf("%d", &k);
     
     file = fopen("~$Temp.txt", "wt");     
     for (int i = 0; i < n; i++){
        if (a[i].nom != k){
           a[i].nom = i+1;
           fprintf(file, "\n%d\n", a[i].nom);           
           fprintf(file, "%s\n", &a[i].school);
           fprintf(file, "%s\n", &a[i].year);       
           fprintf(file, "%s\n", &a[i].high_sc);       
           fprintf(file, "%d\n", &a[i].sr_ball);}}           
     fclose(file);
     n--;
     return(n);}
 
void menu_out(int a) { 
                 clrscr();                     
                 setcolor(WHITE,BLACK);
                 switch (a) { 
                    case 1: setcolor(WHITE,PINK); 
                    printf("Ввод записи \n");
                       setcolor(WHITE,BLACK); 
                 printf("Вывод всех записей на экран\n");
                    printf("Принадлежность записи к файлу\n");
                 printf("Добавление записи в файл\n");
                 printf("Удаление записи из файла\n");
                 printf("Выход\n");
                 break;                                                         
                 case 2: printf("Ввод записи \n");
                setcolor(WHITE,PINK);
                printf("Вывод всех записей на экран\n");
                setcolor(WHITE,BLACK)
                printf("Принадлежность записи к файлу\n");
                printf("Добавление записи в файл\n")
                printf("Удаление записи из файла\n");
                printf("Выход\n");
                break;
                case 3: printf("Ввод записи \n");
                printf("Вывод всех записей на экран\n");
                setcolor(WHITE,PINK);
                printf("Принадлежность записи к файлу\n");
                setcolor(WHITE,BLACK);
                printf("Добавление записи в файл\n");
                printf("Удаление записи из файла\n");
                printf("Выход\n");
                break;
                case 4: printf("Ввод записи \n");
                printf("Вывод всех записей на экран\n");
                printf("Принадлежность записи к файлу\n");
                setcolor(WHITE,PINK);
                printf("Добавление записи в файл\n");
                setcolor(WHITE,BLACK);
                printf("Удаление записи из файла\n");
                printf("Выход\n");
                break;
                case 5: printf("Ввод записи \n");
                printf("Вывод всех записей на экран\n");
                printf("Принадлежность записи к файлу\n");                     
                printf("Добавление записи в файл\n");
                setcolor(WHITE,PINK);
                printf("Удаление записи из файла\n");
                setcolor(WHITE,BLACK);
                printf("Выход\n");
                break;
                case 6: printf("Ввод записи \n");
                printf("Вывод всех записей на экран\n");
                printf("Принадлежность записи к файлу\n");
                printf("Добавление записи в файл\n");                                           
                printf("Удаление записи из файла\n");
                setcolor(WHITE,PINK);
                printf("Выход\n");
                setcolor(WHITE,BLACK);
                break;}}
 
int main(){
int aA, vibor = 1, N = 6;
    clrscr();                           
    printf("\n");     
    setcolor(WHITE,BLACK);   
    clrscr();                           
    printf("\n");     
    setcolor(WHITE,BLACK);
    int n;
    FILE *file = fopen("~$Temp.txt", "wt");   
    if (file == NULL){
          perror("\n Такого файла нет:  ");
          getch( );
          return(1);}         
    while (aA != 27){
          menu_out(vibor);
          aA = getch();
          if (aA == 224) aA = getch(); 
    switch (aA){
           case 13:
                switch (vibor){
                     case 1: clrscr(); n = input(file, a); clrscr(); break;     
                     case 2: clrscr(); output(file, a, n); clrscr(); break;   
                     case 3: clrscr(); search(a, n); clrscr(); break;
                     case 4: clrscr(); n += add(file, a, n); clrscr(); break;
                     case 5: clrscr(); n = delet(file, a, n); clrscr(); break;
                     case 6: aA = 27; break;}
           break;   
           case 80:
                   if ( vibor < N ) vibor++;
                   else vibor = 1;
           break;
   
           case 72:
                   if (vibor > 1) vibor--;
                   else vibor = N;
           break;}}
    printf("\n");     
    system("pause");   
return 0;}


Первая запись выводится корректно. Но последующие....почему так? Может кто объяснить, помочь найти ошибку?
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для операционной системы.

Оффлайн Millenia

  • Пользователь
  • **
  • Сообщений: 44
    • Просмотр профиля
Всем спасибо за внимание, сама нашла ошибку.
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для операционной системы.