C
C
canabisss2018-11-01 21:14:54
C++ / C#
canabisss, 2018-11-01 21:14:54

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;
}

spoiler
/* Примеры вывода, когда доходит до таблицы просто ее не выводит
---------------------------------------------------------------------------------
| Республика | 1940 г || 1960 г |
---------------------------------------------------------------------------------
| | Число врачей | Число коек || Число врачей | Число коек |
---------------------------------------------------------------------------------
| РСФСР | 82.2 | 482 || 221.2 | 939.4 |
---------------------------------------------------------------------------------
| Украина | 33.4 | 157.6 || 73.8 | 318 |
---------------------------------------------------------------------------------
| Латвия | 1.7 | 12 || 5.2 | 23.2 |
---------------------------------------------------------------------------------
| Эстония | 0.07 | 0.1 || 2.7 | 11.2 |
---------------------------------------------------------------------------------
*/
/* Вывод на А , найти min Соотношения
------------------------------------------------------
| Республика | Число врачей | Число коек | Отношение |
------------------------------------------------------
| РСФСР | 82.2 | 482 | 82.2/482 |
------------------------------------------------------
| Украина | 33.4 | 157.6 | 33.4/157.6|
------------------------------------------------------
| Латвия | 1.7 | 12 | 1.7/12 |
------------------------------------------------------
| Эстония | 0.07 | 0.1 | 0.07/0.1 |
------------------------------------------------------
*/
/* // Вывод на B 1960 г. в каких республиках врачей < M тыс. |-- республика --|-- число врачей --|
М = 100 тыс
----------------------------------
| Республика | Число врачей |
----------------------------------
| РСФСР | 221.2 |
----------------------------------
| Украина | 73.8 |
----------------------------------
| Латвия | 5.2 |
----------------------------------
| Эстония | 2.7 |
----------------------------------

Program in C, #C - not found.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
J
jcmvbkbc, 2018-11-01
@noobsa

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 question

Ask a Question

731 491 924 answers to any question