Stack around the variable 'i' was corrupted - C (СИ)
Формулировка задачи:
Создать массив указателей на функцию. Ввести цифру, которая обозначает функцию, которую необходимо выполнить: 0 – найти последнее положительное,
1 – умножить числа,
2 – посчитать среднее значение.
Программа выполняется, но в конце выскакивает ошибка - Run-Time Check Failure #2 - Stack around the variable 'i' was corrupted.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main (void)
{
int ladd (int, int);
int mul (int, int);
int avg (int, int);
int (*y[10]) (int, int) = {ladd, mul, avg};
char *str[ ] = {"ladd", "mul", "avg"};
int m, n;
char i = '0';
while (i)
{
system("pause");
system("cls");
puts ("Input the operation: \n");
puts ("0 - to find last positive \n");
puts ("1 - to find result of multiplication \n");
puts ("2 - to find average value \n");
puts ("9 - exit \n");
scanf("%d", &i);
if ( i == 9 ) return;
if ( i < 0 || i > 2 )
{
puts ("Incorrect operation code \n");
system("cls");
continue;
}
puts ("Input the operands (m, n): \n");
scanf("%d%d", &m, &n);
printf ("%s= %d \n", str[i],(*y[i]) (m, n) );
}
}
int avg (int m, int n) {return (( m + n ) / 2); }
int ladd (int m, int n) {return ( m > n ) ? m: n; }
int mul (int m, int n) {return m * n; }Решение задачи: «Stack around the variable 'i' was corrupted»
textual
Листинг программы
#include <stdio.h>
int main(void) {
int n;
printf("Number: ");
if ( ! scanf("%d", &n) )
printf("Incorrect input!\n");
else
printf("All right, value is %d\n", n);
return 0;
}
Объяснение кода листинга программы
- Включаем файл stdio.h для работы с функциями ввода-вывода
- Объявляем переменную типа int с именем n
- Выводим на экран приглашение для ввода числа
- Проверяем успешность ввода числа с помощью функции scanf, если ввод некорректен выводим сообщение об ошибке
- Если ввод корректен, выводим сообщение о правильном вводе и значение переменной n
- Завершаем программу