我在這裏沒有得到預期的輸出是我寫爲什麼我同時傳遞字符的功能用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
而不是-
。
我在這裏沒有得到預期的輸出是我寫爲什麼我同時傳遞字符的功能用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
而不是-
。
TL; DR,您的代碼調用undefined behavior。
您使用的是危險的(謝天謝地,現在非標準參考)獲取變量類型的方式,也就是類型默認爲int
。
由於您的變量缺少數據類型定義,因此它們默認爲int
。因此,printtit()
,a
和ch
的類型爲int
。
現在,通過傳遞a
作爲%f
的參數,您就可以調用UB了。程序(和它的輸出)既不可信,也不可能有任何理由。
注意:啓用編譯器警告並注意它們!
價:從C11
(提供C99
也)報價,
在第二版的主要變化包括:
。 。 。 。
- 刪除隱式int類型
儘管這個問題已經解決了,我想添加代碼的正確版本改寫:
#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) ;
}
1)正確格式化你的代碼。 2)您應該已經爲'printit'的缺失聲明(又名原型)發出警告。這也是史前C(又名K&R-C)。 **永遠不要**使用這個。它自ca.以來已過時。 27年。代碼調用未定義的行爲。 – Olaf
**不要**以這種方式編寫C代碼。除了未定義的行爲問題外,這段代碼真的很難理解。 – jboockmann
在使用之前,您沒有'printit'原型/聲明。並介意你的縮進 –