一个C语言的问题。好像是链表那里错了,但是调试了好多次都没发现问题,求指导
写了个求最大公约数的程序。结果运行的时候是这种情况调试的时候是这样的
点了中断,再继续,就这样了
但是调试的时候,输出的结果是对的
我也不知道是怎么会,搞了半天没发现错误,求帮忙找下错误,谢谢了!
还有输出信息在这里
然后代码:
程序代码:/****************************************
* Made by Liang Hanlei *
* Copyright © Liang Hanlei Reverse *
****************************************/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct NUMBERS
{
struct NUMBERS * front;
int no;
int num;
struct NUMBERS * next;
} NUMBERS;
int GreatestCommonDivisor(int, int); //To fig out the greatest common divisor
void AddList(int, int, NUMBERS *, NUMBERS *); //To add items to list
void ChangeMax(int *, int *); //To make the prvious number larger
void FreeList(NUMBERS *);
int main(void)
{
NUMBERS * head = NULL;
NUMBERS * num = NULL;
NUMBERS * prev = NULL;
NUMBERS * interate = NULL; //To interate the list
int prevNum; //To store the previous number
int remainder; //To store the remainder
int numTemp; //To store the integer at moment
int count = 0; //To count how many integers are entered in
int no;
char dig;
puts("Please enter some integers to cotinue (with \"Space\" button to dig, with \"Enter\" button to quit entering):");
head = (NUMBERS *) malloc(sizeof(NUMBERS));
prev = head;
no = 0;
while (scanf("%d%c", &numTemp, &dig))
{
if (!count && dig == '\n')
{
puts("Nothing have entered.");
exit(1);
}
++no;
num = (NUMBERS *) malloc(sizeof(NUMBERS *));
AddList(numTemp, no, prev, num);
prev = num;
if (dig == '\n')
{
break;
}
++count;
}
num->next = head->next;
head->next->front = num;
interate = head->next;
prevNum = interate->num;
no = head->next->no;
while (interate->next->no != no)
{
interate = interate->next;
remainder = interate->num;
ChangeMax(&prevNum, &remainder);
prevNum = GreatestCommonDivisor(prevNum, remainder);
if (prevNum == 1)
{
break;
}
}
printf("The greatest common divisor is %d\n", prevNum);
FreeList(head);
return 0;
}
int GreatestCommonDivisor(int prevNum, int remainder)
{
int prevRemainder;
while (remainder)
{
prevRemainder = remainder;
remainder = prevNum % remainder;
prevNum = prevRemainder;
}
return prevNum;
}
void AddList(int numTemp, int no, NUMBERS * prev, NUMBERS * num)
{
num->num = numTemp;
num->no = no;
prev->next = num;
num->front = prev;
}
void ChangeMax(int * prevNum, int * remainder)
{
int temp;
if (*prevNum < *remainder)
{
temp = *prevNum;
*prevNum = *remainder;
*remainder = temp;
}
}
void FreeList(NUMBERS * head)
{
int no;
NUMBERS * prev;
no = head->next->front->no;
prev = head->next;
while (prev->no != no)
{
free(head);
head = prev;
prev = prev->next;
}
free(head);
free(prev);
}








