Answer the question
In order to leave comments, you need to log in
Why does it throw an error when outputting a block with a table?
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <math.h>
#include <Windows.h>
#define LG 73
char linija1[LG + 1] = "------------------------------------------------------";
char linija2[LG + 1] = "-----------------------------";
int k = 1;
struct tableI
{
char* name[4];
float doctor[100];
float bunk[100];
} tableI;
void get_name(char nm[]) {
printf("Введите %d-ую страну : ", k);
scanf_s("%s", &nm, 80);
++k;
}
void get_doc(float dc[]) {
float res = 1;
do {
if (dc < 0 || res != 1)
printf("Вы ошиблись, введите повторно кол-во врачей: ");
else
printf("Введите кол-во врачей: ");
res = scanf_s("%f", &dc);
while (getchar() != '\n');
} while (dc < 0 || res != 1);
}
void get_bunk(float bk[]) {
float res = 1;
do {
if (bk < 0 || res != 1)
printf("Вы ошиблись, введите повторно кол-во врачей: ");
else
printf("Введите кол-во врачей: ");
res = scanf_s("%f", &bk);
while (getchar() != '\n');
} while (bk < 0 || res != 1);
}
int main()
{
setlocale(LC_ALL, "rus");
int i;
float n, min, j;
struct tableI a; // struct Counry
printf("Введите страны: ");
get_name(a.name[0]);
get_name(a.name[1]);
get_name(a.name[2]);
get_name(a.name[3]);
struct tableI b; // count doc
printf("Введите кол-во врачей за 1940: ");
get_doc(&b.doctor[0]); // 1940
get_doc(&b.doctor[1]);
get_doc(&b.doctor[2]);
get_doc(&b.doctor[3]);
printf("Введите кол-во врачей за 1960: ");
get_doc(&b.doctor[4]); // 1960
get_doc(&b.doctor[5]);
get_doc(&b.doctor[6]);
get_doc(&b.doctor[7]);
struct tableI c; // count bunk
printf("Введите кол-во коек в 1940");
get_bunk(&c.bunk[0]); // 1940
get_bunk(&c.bunk[1]);
get_bunk(&c.bunk[2]);
get_bunk(&c.bunk[3]);
printf("Введите кол-во коек в 1940");
get_bunk(&c.bunk[4]); // 1960
get_bunk(&c.bunk[5]);
get_bunk(&c.bunk[6]);
get_bunk(&c.bunk[7]);
//вывод шапки
printf("%s\n", linija1);
printf("| Республика | Число врачей | Число коек | Отношение |\n");
printf("%s\n", linija1);
// вывод данных
min = b.doctor[1] / c.bunk[1];
for (i = 0; i <= 3; i++)
{
n = b.doctor[i] / c.bunk[i];
printf("| %-9s| %-11.2f| %-9.2f| %-8.2f| \n", a.name[i], b.doctor[i], c.bunk[i], n);
printf("%s\n", linija1);
if (min > n)
min = n;
}
printf("min: %.2f \n", min);
printf("Введите число врачей: ");
scanf_s("%f", &j);
//вывод шапки table 2
printf("%s \n", linija2);
printf("| Республика | Число врачей | \n");
printf("%s \n", linija2);
// вывод данных
for (i = 0; i <= 3; i++)
{
if (b.doctor[i + 4] < j)
{
printf("| %-9s| %-11.2f| \n", a.name[i], b.doctor[i + 4]);
printf("%s\n", linija2);
}
}
return 0;
}
Answer the question
In order to leave comments, you need to log in
struct tableI { char* name[4]; float doctor[100]; float bunk[100]; } tableI; ... struct tableI a; ... get_name(a.name[0]);
Why does it throw an error when outputting a block with a table?
Because you are calling get_name with an uninitialized pointer a.name[...]. To make this place work, you need to somehow allocate memory for a.name[...]. For example like this:struct tableI { char name[4][100]; float doctor[100]; float bunk[100]; } tableI;
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question