Я написал следующую программу, чтобы найти сумму цифр входного числа (n
), которые меньше первой цифры номера (функция sumlessfirst(n)
) или сумму цифр входного числа (n
), которые меньше определенного пользователем числа (x
) (функция sumlessinput(n,x)
).Пользователь должен ввести «первый», чтобы перейти к функции sumlessfirst(n)
, или ввести «пользовательский», чтобы перейти к sumlessinput(n,x)
.Но после компиляции код принимает ввод от пользователя как «первый» или «пользовательский», а затем показывает ошибку разрушения стека.Каковы причины этого?
#include <stdio.h>
int sumlessfirst(int n)
{
int i, j = n, sum = 0, sum1 = 0, count = 0;
for (i = n; i > 0; i = i / 10)
{
count = count + 1;
}
while (count >= 2)
{
j = j / 10;
count = count - 1;
}
int k;
for (k = n; k > 0; k = k / 10)
{
if (k % 10 > j)
{
sum1 = sum1 + k % 10;
}
}
printf("The sum of digits less than the first digit off %d is %d\n", n, sum1);
return 0;
}
int sumlessinput(int n, int x)
{
int i, sum;
for (i = n; i > 0; i = i / 10)
{
if (i % 10 > x)
{
sum = sum + i % 10;
}
}
printf("The sum of digits greater than %d of %d is %d\n", x, n, sum);
return 0;
}
int main()
{
int n, x;
char s[100];
printf("Enter whether you want to go for the first digit or go for a custom value\n");
printf("If you wanna go for first digit, enter first\n");
printf("Tf you wanna go for custom input, enter custom\n");
scanf("%s", &s[100]);
if (s == "first" || s == "First")
{
printf("Enter the number: ");
scanf("%d", &n);
sumlessfirst(n);
}
else if (s == "custom" || s == "Custom")
{
printf("Enter the number: ");
scanf("%d", &n);
printf("Enter the custom value: ");
scanf("%d", &x);
sumlessinput(n, x);
}
}
Я получаю ошибку:
Enter whether you want to go for the first digit or go for a custom value
If you wann go for first digit, enter first
If you wann go for custom input, enter custom
custom
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)