Завершение ввода символом
Мне нужно закончить ввод символом 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
→ Ссылка
- Вы не вызываете функцию Enter в функции main. Это ошибка.
- У вас не срабатывает getchar()
Вы слишком увлекаетесь глобальными переменными. Ну хоть 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 -------------------------------------------------------------------"); }