Автозаполняет мусор

Программа должна иметь 4 типа различного заполнения списка структур (1 – ввод с экрана, 2 – случайным образом), а также действия над структурами (3 – сортировка, 4 – печать). Для этого я сделал многофайловый проект, всё работает, но вот неудача - когда я выбираю "Автоматически", то в первом столбце, где надо выводить одну заглавную букву, после вылазит мусор. Код прикладываю ниже.

qa.h :

#pragma once
#include <iostream>
#include "qw.h"
using namespace std;
void zapoln(int rows,mon[]);
void random(int rows, mon[]);
void sort(int rows, mon[]);
void display(int rows,mon[]);

qa.cpp :

#include "qw.h"
#include "qa.h"
#include <iostream>
using namespace std;
#define N 27    

void zapoln(int rows,mon mm[])
{
    int ne;
    double sqx;
    for (ne = 0; ne < rows; ne++) {
        printf("%d. Введите: название, школу, количество, площадь >",ne + 1);
        scanf_s("%s", mm[ne].name, sizeof(mm[ne].name));
        if (!strcmp(mm[ne].name, "***")) break;
        scanf_s("%f", &mm[ne].sc, sizeof(mm[ne].name));
        scanf_s("%f", &mm[ne].cnt);
        scanf_s("%lf", &sqx); mm[ne].sq = sqx;
    }
}

void random(int rows,mon mm[]) {    

 char t[] = { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U',
'V','W','X','Y','Z' };

    for (int i = 0;i < rows;i++)
    {
    *mm[i].name = t[rand() %19];
        mm[i].sc = (rand() % 78432) / 10.0;
        mm[i].cnt = (rand() % 133315) / 10.0;
        mm[i].sq = rand() % 94578678 + 10000000;
    }
}

void sort(int rows, mon mm[]) {
    int m;
    struct mon xy;
    for (int i = 0; i < rows; i++) {
        m = i;
        for (int j = i + 1; j < rows; j++)

            if (strcmp(mm[m].name, mm[j].name) > 0) m = j;
        if (m > i) {

            xy = mm[i];
            mm[i] = mm[m];
            mm[m] = xy;
        }
    }
}

void display(int rows,mon mm[]) {
#ifdef DEBUG
    cout << __FUNCTION__ << " " << __DATE__ << endl;
#endif // DEBUG
    printf("----------------------------------------------------------------------------------\n");
    printf("|Приблизительное количество звезд разных спектральных классов в Галактике        |\n");
    printf("|--------------------------------------------------------------------------------|\n");
    printf("| Спектральный класс  | Приблизительная масса   |Часть         |    Численность  |\n");
    printf("|                     |    (отн.Солнца)         | в впроцентах |                 |\n");
    printf("|---------------------|-------------------------|--------------|-----------------|\n");

    for (int i = 0; i < rows; i++)
        printf("| %-19s |   %-20.2f  | %-12.2f | %-15.2lf |\n",
            mm[i].name, mm[i].sc, mm[i].cnt, mm[i].sq);
    printf("---------------------------------------------------------------------------------\n");
}

qw.h :

#pragma once
#define N 27
#ifndef _QA_H_
#define _QA_H_
struct mon {
    char name[45];
    float sc;
    float cnt;
    double sq;
};
#endif 

main.cpp :

#include <ctime>
using namespace std;
#define N 27
#include "qw.h"
#include "qa.h"
int main() {

    srand(time(NULL));
    mon mm[45];
    setlocale(LC_ALL, "ru");
    int rows;
    std::system("chcp 1251");

    /*    O 32 0,00002 55000
       F 1,25 2,9 12000000000  Данные
       M 0,2 73,2 293000000000
*/
    int answer, answer2;
    cout << "Сколько строк вы хотите, чтобы было в таблице: " << endl;
    cin >> rows;
    cout << "Введите, что выбрать: 1 - Ручное заполнение," << endl;
    cout << "\t\t\t 2 - Автоматическое." << endl;
    cin >> answer;
    if (answer == 1) {
        cout << "Вы выбрали вариант номер " << answer << endl << endl;
        zapoln(rows,mm);

    }
    else if (answer == 2) {
        cout << "Вы выбрали вариант номер " << answer << endl << endl;

        random(rows, mm);

    }
    cout << "Теперь введите действия над печатями: 3 - Сортировка," << endl;
    cout << "\t\t\t 4 - Печать." << endl;
    cin >> answer2;
    if (answer2 == 3) {
        cout << "Вы выбрали вариант номер " << answer2 << endl << endl;
        sort(rows,mm);
        display(rows,mm);
    }
    else if (answer2 == 4) {
        cout << "Вы выбрали вариант номер " << answer2 << endl << endl;
        display(rows,mm);
    }

    return 0;
}

Вот скрин того, что выводит.

введите сюда описание изображения


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

Автор решения: Harry
*mm[i].name = t[rand() %19];

А завершающий строку нолик кто будет писать?...

*(mm[i].name+1) = '\0';

или просто

*(mm[i].name+1) = 0;

Строка в стиле С - это массив символов, признаком конца строки при этом является нулевой символ (не символ нуля, а именно нулевой :))

→ Ссылка