[英]I believe I am getting confused with the pointers in my program
下面我创建了一个进入 while 循环的函数。 在 while 循环中,调用 if 语句遍历列表并检查数字以查看哪个最大,哪个最小。 当我运行程序时,只调用一个printf()
,并且多次打印相同的printf()
。 似乎选择两个数字并在同一个printf()
函数下打印它们。我知道firstNumber = firstNumber->next;
应该遍历列表。 是不是secondNumber = secondNumber->next->next;
应该指向列表中的下一个数字?
typedef struct A_NewNumber {
struct A_NewNumber *next;
double newNum;
} NewNumber;
void NumberSize(NewNumber *start) {
NewNumber *firstNumber = start;
NewNumber *secondNumber = start;
if(start != NULL) {
while (secondNumber != NULL && secondNumber->next != NULL) {
secondNumber = secondNumber->next->next;
firstNumber = firstNumber->next;
if(secondNumber > firstNumber) {
printf("The biggest number is:%lf \n",secondNumber->newNum);
} else {
printf("The smallest number is:%lf \n",firstNumber->newNum);
}
firstNumber = firstNumber->next;
}
}
}
完整程序的示例运行:
Please enter a number or
'quit' to stop or 'print' to print/calculate
12
Please enter a number or
'quit' to stop or 'print' to print/calculate
13
Please enter a number or
'quit' to stop or 'print' to print/calculate
14
Please enter a number or
'quit' to stop or 'print' to print/calculate
15
Please enter a number or
'quit' to stop or 'print' to print/calculate
16
Please enter a number or
'quit' to stop or 'print' to print/calculate
17
Please enter a number or
'quit' to stop or 'print' to print/calculate
print
Numbers:12.000000
Numbers:13.000000
Numbers:14.000000
Numbers:15.000000
Numbers:16.000000
Numbers:17.000000
The biggest number is:14.000000
The biggest number is:16.000000
The smallest number is:17.000000
if()
内部的比较应该在值上,而不是在指针上。
if( num1 > num2) {
// Do something.
} else {
// Do something else.
}
那是因为你在执行这个firstNumber = firstNumber->next;
在while()
循环中声明两次。
firstNumber = firstNumber->next;
firstNumber = firstNumber->next;
这使得secondNumber == firstNumber;
你能说明结果是什么吗?
我认为问题在于firstNumber
和secondNumber
的分配。 它们似乎确实指向同一个对象。 因此,修改一个将修改另一个。 此外,我认为跟踪列表的头部是安全的。 我会做这样的事情:
void NumberSize(NewNumber *start){
if(start==NULL){
printf('empty list');
return;
}
double high = start->newNum;
double small= start->newNum;
NewNumber *iterator = start->next;
while(iterator!=NULL){
if(iterator->newNum > high){
high = iterator->newNum;
}
if(iterator->newNum < small){
small = iterator->newNum;
}
iterator = iterator->next;
}
printf("The biggest number is:%lf \n",high);
printf("The smallest number is:%lf \n",small);
}
我不确定这是否是您想要实现的目标...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.