簡體   English   中英

我相信我對程序中的指針感到困惑

[英]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;

你能說明結果是什么嗎?

我認為問題在於firstNumbersecondNumber的分配。 它們似乎確實指向同一個對象。 因此,修改一個將修改另一個。 此外,我認為跟蹤列表的頭部是安全的。 我會做這樣的事情:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM