#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
проходимого asint*
? Если ваш компилятор, по крайней мере, не предупредил вас об этом, выбросьте его и получите настоящий набор инструментов (это похоже на 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;
}