簡體   English   中英

1.#QNANO用C語言輸出嗎?

[英]1.#QNANO in output in C language?

#include <stdio.h>

float diff_abs(float,float);

int main() {
  float x;
  float y;
  scanf("%f", &x);
  scanf("%f", &y);
  printf("%f\n", diff_abs(x,y));
  return 0;
}

float diff_abs(float a, float b) {
  float *pa = &a;
  float *pb = &b;
  float tmp = a;
  a = a-b;
  b = *pb-tmp;
  printf("%.2f\n", a);
  printf("%.2f\n", b);
}

大家好,我正在做一個C程序,應將其保留在變量ab中,並將其保留在b變量ba中。 沒關系,但是如果我在輸出末尾運行我的代碼,編譯器會顯示以下消息:

3.14
-2.71
5.85
-5.85
1.#QNAN0

1.#QNANO是什么意思?

問題是,您沒有從調用的函數diff_abs() return值, diff_abs()嘗試使用return -ed值。 它調用未定義的行為

引用C11 ,第§6.9.1章, 函數定義

如果到達終止函數的} ,並且調用者使用了函數調用的值,則該行為未定義。

根據您的注釋,似乎不需要該函數具有任何返回值。 在這種情況下,

  • 將函數簽名更改為返回類型void
  • 只需調用函數,擺脫過去的printf()中調用main()完全。 調用的函數中的printf()會被執行,並且打印將單獨顯示,您無需為此將該函數作為參數傳遞給另一個printf()

在這段代碼printf("%f\\n", diff_abs(x,y))您告訴編譯器打印float類型的變量,該變量應為diff_abs函數的返回值。 但是在函數diff_abs您沒有返回任何值。

因此正在等待float %f將不會獲得任何值,並且將輸出#QNAN0 ,這表示Not A Number 因此,您可以按以下方式更改代碼:

在您的主要:

//printf("%f\n", diff_abs(x,y));   //comment this line
diff_abs(x,y);  //just call the function

在函數中:

void diff_abs(float a, float b) {  //change the return value to void
  //float *pa = &a;   //you are not using this variable
  float *pb = &b;
  float tmp = a;
  a = a-b;
  b = *pb-tmp;
  printf("%.2f\n", a);
  printf("%.2f\n", b);
  return;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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