#include <stdio.h>
int main(){
int sale;
float comm = 0;
printf("enter the sale amount: ");
scanf("%d",&sale);
if (sale < 10000) {
comm = 0;
}
else if (sale >= 10000 && sale < 15000){
comm = sale * 0.05;
} else if (sale >= 15000 && sale < 25000) {
comm = 0.1 * sale;
} else if(sale > 25000) {
comm = 0.15 * sale;
}
printf("commission is %f",comm);
return 0;
}
在上面的代碼中,如果不初始化為 0,就無法分配 comm 變數。它不會拋出錯誤,但每當我列印它時它的值始終為 0。背后的原因是什么?請如果有人可以詳細解釋。
uj5u.com熱心網友回復:
comm如果用戶輸入,這里只有“必要”初始化它才能有一個值25000- 這是唯一不匹配任何 if 陳述句的值,因此不會為comm.
如果用戶輸入X或其他任何不是數字的東西,也會有一個潛在的問題。在那種情況下sale將不會被設定,并且將繼續未初始化,因此任何情況都可能觸發。
uj5u.com熱心網友回復:
在這種情況下,您實際上不必初始化 comm。并且代碼很好,它應該可以作業,也許你嘗試了一個太小的數字(小于 10000),這就是為什么它給你 0。嘗試仔細檢查嘗試更大的數字 :)
uj5u.com熱心網友回復:
請填寫if else宣告。我的意思是也包括 else 陳述句。這樣,如果控制元件確實找到任何合適的條件,它就可以進入 else 陳述句并初始化comm變數。
uj5u.com熱心網友回復:
C 不自動將所有區域變數初始化為零的原因是“C 精神”,除非另有說明,否則選擇性能而不是安全。是否使用最高性能或最高安全/防御性編程的決定由程式員決定。而其他編程語言可能不會讓您選擇并始終使用更安全的選項。
在您的情況下,不需要初始化。因此,如果代碼首先將變數顯式設定為零,然后幾乎立即用一個值覆寫它,那么這將只是無用的開銷代碼。
同樣,在使用堆分配時,您有兩種選擇:malloc一種速度快但不執行零初始化,或者calloc速度較慢但執行零初始化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/480623.html
