Stack around the variable was corrupted - C (СИ) (150274)
Формулировка задачи:
Непонятно, почему возникает данная ошибка, причем она возникает на том моменте, когда уже нет никакой записи в переменную ans. 106 строка. Прошу помочь.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <iomanip>
#include <math.h>
#include <ctype.h>
#include <conio.h>
#include <iostream>
#include <stdlib.h>
int main()
{
setlocale(LC_ALL, "Russian");
int mass[20][20], mass1[20][20], res[20][20], i, k, j, z, n, x, y,z1;
char ans;
printf("Введите размер исходных 2 - x матриц - не более 20\n");
printf("Вы ввели: ");
scanf_s("%d", &n);
if (n > 0 && n < 21)
{
printf("\n");
printf("----------\n");
printf("Матрица 1\n");
printf("----------\n");
printf("\n");
printf("1 - Автозаполнение матрицы 1 случайными значениями\n");
printf("2 - Ввод данных для матрицы 1 с клавиатуры \n");
printf("3 - Заполнение диагонали матрицы 1 единицами\n");
printf("\n");
printf("Вы ввели: ");
scanf("%d", &z);
switch (z)
{
case 1:
{
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
mass[i][j] = rand();
}
printf("\n");
printf("---------------\n");
printf("Ваш результат: \n");
printf("---------------\n");
for (i = 0; i < n; i++)
{
printf("\n");
for (j = 0; j < n; j++)
printf("%d\t", mass[i][j]);
}
printf("\n"); break;
}
case 2:
{
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
printf("Введите элемент первой матрицы %d.%d : ", i + 1, j + 1);
if (scanf("%d", &mass[i][j]) != 1) {
for (;;)
{
gets(&ans);
printf("Вы ввели неверное значение! Попробовать еще? (y / n): ");
scanf("%s", &ans);
if (strlen(&ans) == 1)
{
if (ans == 'y')
{
system("cls");
break;
}
if (ans == 'n')
{
system("cls");
exit(0); return 1;
}
}
}
}
}break;
}
case 3:
{
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
if (i == j)
mass[i][j] = 1;
else mass[i][j] = 0;
}
printf("\n");
printf("Ваша заполненная матрица 1: ");
printf("\n");
for (i = 0; i < n; i++)
{
printf("\n");
for (j = 0; j < n; j++)
printf("%d\t", mass[i][j]);
}
printf("\n");
}break;
}
for (;;)
{
gets(&ans);
printf("\n");
printf("Вы хотите редактировать полученную матрицу 1? (y / n): ");
scanf("%s", &ans);
if (strlen(&ans) == 1)
{
if (ans == 'y')
{
printf("Введите номер строки элемента матрицы: ");
if (scanf_s("%d", &x))
{
printf("Введите номер столбца элемента матрицы: ");
if (scanf_s("%d", &y))
{
if (x <= i && y <= j)
{
printf("Введите новое значение элемента матрицы 1 (%d,%d): ", x, y);
if (scanf_s("%d", &mass[x - 1][y - 1]))
{
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%d\t", mass[i][j]);
}
printf("\n");
}
}
}
}
}
}
if (ans == 'n')
{
break;
}
}
}
printf("\n");
printf("----------\n");
printf("Матрица 2\n");
printf("----------\n");
printf("\n");
printf("4 - Автозаполнение матрицы 2 случайными значениями\n");
printf("5 - Ввод данных для матрицы 2 с клавиатуры \n");
printf("6 - Заполнение диагонали матрицы 2 единицами\n");
printf("\n");
printf("Вы ввели: ");
scanf("%d", &z);
switch (z)
{
case 4:
{
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
mass1[i][j] = rand();
}
printf("\n");
printf("---------------\n");
printf("Ваш результат:\n");
printf("---------------\n");
for (i = 0; i < n; i++)
{
printf("\n");
for (j = 0; j < n; j++)
printf("%d\t", mass1[i][j]);
}
printf("\n"); break;
}
case 5:
{
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
printf("Введите элемент второй матрицы %d.%d : ", i + 1, j + 1);
if (scanf("%d", &mass[i][j]) != 1) {
for (;;)
{
gets(&ans);
system("cls");
printf("Вы ввели неверное значение! Попробовать еще? (y / n): ");
scanf("%s", &ans);
if (strlen(&ans) == 1)
{
if (ans == 'y')
{
system("cls");
main();
}
if (ans == 'n')
{
system("cls");
exit(0); return 1;
}
}
}
}
}
break;
}
case 6:
{
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
if (i == j)
mass1[i][j] = 1;
else mass1[i][j] = 0;
}
printf("\n");
printf("Ваша заполненная матрица 2: ");
printf("\n");
for (i = 0; i < n; i++)
{
printf("\n");
for (j = 0; j < n; j++)
printf("%d\t", mass1[i][j]);
}
printf("\n");
}break;
}
} return 0;
}Решение задачи: «Stack around the variable was corrupted»
textual
Листинг программы
if (ans == 'y' && getchar()=='\n') do_something();