2016-04-21 49 views
-5

我在這裏沒有得到預期的輸出是我寫爲什麼我同時傳遞字符的功能用C

#include<stdio.h> 

main() 
{ 
    float a = 15.5 ; 
    char ch = 'd' ; 
    printit (a, ch); 
} 
printit (a, ch) 
{ 
    printf ("\n%f %c ", a, ch) ; 
} 

代碼和輸出是:

15.500000─

這裏我期待打印字符d而不是-

+3

1)正確格式化你的代碼。 2)您應該已經爲'printit'的缺失聲明(又名原型)發出警告。這也是史前C(又名K&R-C)。 **永遠不要**使用這個。它自ca.以來已過時。 27年。代碼調用未定義的行爲。 – Olaf

+0

**不要**以這種方式編寫C代碼。除了未定義的行爲問題外,這段代碼真的很難理解。 – jboockmann

+0

在使用之前,您沒有'printit'原型/聲明。並介意你的縮進 –

回答

4

TL; DR,您的代碼調用undefined behavior

您使用的是危險的(謝天謝地,現在非標準參考)獲取變量類型的方式,也就是類型默認爲int

由於您的變量缺少數據類型定義,因此它們默認爲int。因此,printtit(),ach的類型爲int

現在,通過傳遞a作爲%f的參數,您就可以調用UB了。程序(和它的輸出)既不可信,也不可能有任何理由。

注意:啓用編譯器警告並注意它們!


價:從C11(提供C99也)報價,

在第二版的主要變化包括:

。 。 。 。

- 刪除隱式int類型

0

儘管這個問題已經解決了,我想添加代碼的正確版本改寫:

#include<stdio.h> 

void printit (float, char); // function declaration 

int main(void) 
{ 
    float a = 15.5 ; 
    char ch = 'd' ; 
    printit (a, ch); 
    return (0); 
} 
void printit (float a, char ch) 
{ 
    printf("\n%f %c ", a, ch) ; 
} 
相關問題