Завершение ввода символом

Мне нужно закончить ввод символом 0, я проверяю значение, которое ввожу с клавиатуры через getchar(), но почему то когда пользователь вводит 0, программа просто заканчивает работу, хотя после этого должна напечататься таблица. Не могу понять в чем дело.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10

typedef struct
{
    int number;
    double x1, y1;
    double x2, y2;
    double sq;
}coord;

coord rectang[MAX]; //масив структур

int Enter(int);
void Print(void);

int size = Enter(MAX); //фактична кількість елементів масиву

void main(void)
{
    Print();
}

int Enter(int k)
{
    system("chcp 1251");
    int m = 0;
    int end = 1;
    printf(" 0 - завершити введення\n");
    for (m; m < k; m++) {
        rectang[m].number = m + 1;
        printf(" Прямокутник №%d\n", rectang[m].number);
        printf(" Введіть координати верхньої лівої вершини:\n x1: ");
        scanf_s("%lf", &rectang[m].x1);
        printf(" y1: ");
        scanf_s("%lf", &rectang[m].y1);
        printf(" Введіть координати нижньої правої вершини:\n x2: ");
        scanf_s("%lf", &rectang[m].x2);
        printf(" y2: ");
        scanf_s("%lf", &rectang[m].y2);
        rewind(stdin);
        if ((end = getchar()) == '0')
            break;
    }
    return m;
}

void Print(void)
{
    int m = 0;
    printf("\n Таблиця введених даних:");
    printf("\n -------------------------------------------------------------------");
    printf("\n |    №    |   ");
    printf("   x1     |   ");
    printf("   y1     |   ");
    printf("   x2     |   ");
    printf("   y2     |");
    for (m; m <= size; m++) {
        printf("\n -------------------------------------------------------------------");
        printf("\n |    %d.   |   ", rectang[m].number);
        printf(" %-9.2lf|   ", rectang[m].x1);
        printf(" %-9.2lf|   ", rectang[m].y1);
        printf(" %-9.2lf|   ", rectang[m].x2);
        printf(" %-9.2lf|", rectang[m].y2);
    }
    printf("\n -------------------------------------------------------------------");
}

Ответы (1 шт):

Автор решения: becouse
  1. Вы не вызываете функцию Enter в функции main. Это ошибка.
  2. У вас не срабатывает getchar()
  3. Вы слишком увлекаетесь глобальными переменными. Ну хоть size можно же передать в Print

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 10
    
    typedef struct
    {
    int number;
    double x1, y1;
    double x2, y2;
    double sq;
    }coord;
    
    coord rectang[MAX]; //масив структур
    
    int Enter(int);
    void Print(void);
    
    int size; 
    
    void main(void)
     {
       system("chcp 1251");
       size = Enter(MAX); //фактична кількість елементів масиву
       Print();
       system("pause");
     }
    
    int Enter(int k)
     {
    
        int m = 0;
        int end = 1;
        printf(" 0 - завершити введення\n");
        for (m; m < k; m++) {
          rectang[m].number = m + 1;
    
          printf(" Прямокутник №%d\n", rectang[m].number);
          printf(" Введіть координати верхньої лівої вершини:\n x1: ");
          scanf("%lf", &rectang[m].x1);
          printf(" y1: ");
          scanf("%lf", &rectang[m].y1);
          printf(" Введіть координати нижньої правої вершини:\n x2: ");
          scanf("%lf", &rectang[m].x2);
          printf(" y2: ");
          scanf("%lf", &rectang[m].y2);
    
          printf(" 1 - продолжить\n0 - завершити введення\n");
          scanf("%d",&end);
          if (end == 0)
              break;
          }
          return m;
     }
    
    
    
     void Print(void)
    {
        int m = 0;
        printf("\n Таблиця введених даних:");
        printf("\n -------------------------------------------------------------------");
        printf("\n |    №    |   ");
        printf("   x1     |   ");
        printf("   y1     |   ");
        printf("   x2     |   ");
        printf("   y2     |");
        for (m; m <= size; m++) {
            printf("\n -------------------------------------------------------------------");
            printf("\n |    %d.   |   ", rectang[m].number);
            printf(" %-9.2lf|   ", rectang[m].x1);
            printf(" %-9.2lf|   ", rectang[m].y1);
            printf(" %-9.2lf|   ", rectang[m].x2);
            printf(" %-9.2lf|", rectang[m].y2);
        }
        printf("\n -------------------------------------------------------------------");
    }
    
→ Ссылка