Я просмотрел похожие вопросы, но не нашел подходящего ответа.C: функция int возвращает неправильное значение
Я внедрения кода C, который должен прочитать большое количество (хранится в char*
), и проверить, если его делится на 3.
Программа отлично работает, он печатает правильный ответ (вы увидите printf
в функции, которая работает так, как они должны)
Я даже попытался определить 1 и 0 и вернуть его таким образом, но он по-прежнему не работает.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ONE 1
#define ZERO 0
int isdiv3(char* s, int sum)
{
/*if string is empty, then check if sum until that point is divisible by 3*/
if(strlen(s) == 0) {
if((sum % 3) == 0) {
printf("yes %d\n", sum);
return ONE;
}
else{
printf("no %d\n", sum);
return ZERO;
}
}
if(strlen(s) == 1)
{
if(!strcmp(s, "3") || !strcmp(s, "6") || !strcmp(s, "9"))
{
return ONE;
}
}
int temp = s[strlen(s) - 1] - '0';
sum += temp;
s[strlen(s) - 1] = '\0';
return sum + isdiv3(s, sum);
}
int main()
{
int x;
char str[200] = "123456";
char *s = malloc(sizeof(char) * 7);
strcpy(s, str);
x = isdiv3(s, 0);
if(x == 1)
printf("%s is divisible by 3\n", str);
else
printf("%s is not divisible by 3\n", str);
printf("x %d\n", x);
//prints x 92
return 0;
}
Мой вопрос> как это возможно, что когда return 1
или что-нибудь еще в коде, он печатает некоторое случайное число.
** char * s = malloc (sizeof (char) * 7); ** Возможно, вы будете ** бесплатно ** это когда-нибудь. – Michi
Я не копировал весь код, он был освобожден в конце, но я забыл поместить его здесь. Спасибо за ваш комментарий! – Rorschach