Нерелевантное значение k

#c

#c

Вопрос:

Программа застряла в бесконечном цикле. Я попытался получить значение k, но оно показывает его как 854. Кажется, я допустил ошибку в функции checktrue(). Пытался часами и часами. Не понимаю проблемы.

 #include <stdio.h>
#include <conio.h>
int checktrue(int *p);
int k;
long long int m;
void main()
{
long long int fir=1;
long long int pfir=0,n=0;
long long int sec=2;
long long int sum=fir;
clrscr();
while (n!=5)
{
sum=sum sec;
pfir=fir;
fir=sec;
sec=sec pfir;
n=checktrue(amp;sec);

}
printf("The sum is %llu",sum);
getch();
}
int checktrue(int *p)
{
k=0;
m=*p;
while(m!=0)
{
m=m/10;
k  ;
}
return(k);
}
  

Комментарии:

1. (1) void main() должно быть int main(void) . Отбросьте любой учебник, который говорит вам использовать void main() . (2) Пожалуйста, сделайте отступ в своем коде.

2. k не инициализируется.

3. На какой планете находится адрес long long unsigned int проходимого as int* ? Если ваш компилятор, по крайней мере, не предупредил вас об этом, выбросьте его и получите настоящий набор инструментов (это похоже на Turbo C, так что, вероятно, это неплохая идея в любом случае).

4. Пожалуйста, прочитайте диагностические сообщения компилятора

5. Интересно, как вообще возможно редактировать ответ так быстро, как это сделал @dbush. Я делал отступы в коде почти с момента публикации вопроса, но я прошел почти половину, когда сообщение уже было помечено как отредактированное.

Ответ №1:

Вы передаете указатель на sec , что позволяет функции checktrue() манипулировать вводом. Если вы избавитесь от него, я получу результат 15 .

 #include <stdio.h>
#include <stdlib.h>

unsigned long long checktrue(unsigned long long p);
int main()
{
  unsigned long long fir = 1, n = 0;
  unsigned long long sec = 2;
  unsigned long long sum = fir;
  while (n != 2) {
    sum = sum   sec;
    fir = sec;
    sec = sec   fir;
    n = checktrue(sec);
  }
  printf("The sum is %llun", sum);
  exit(EXIT_SUCCESS);
}

unsigned long long checktrue(unsigned long long p)
{
  unsigned long long k = 0;
  while (p != 0) {
    p /= 10;
    k  ;
  }
  printf("Exited Succesfully %llun", k);
  return k;
}