2017-01-29 53 views
0

Im在分配變量global_duty時遇到問題。等式中的所有其他變量都是每次分配的。據我所知,文本標籤duty_out_lab重置至少兩次。我試圖宣佈global_dutyint,gintgdouble,但似乎沒有任何工作。第一次使用方程式給出正確的答案,然後每隔一段時間輸出0,所有內容都編譯時沒有任何警告。C數學公式只能正確地分配一個變量一次

這裏是相關的代碼。

#include <gtk/gtk.h>  
int global_ontime; 
int global_offtime; 
int global_duty; 
GtkWidget *duty_out_lab; 

static void 
set_duty() 
{ 
    global_duty = global_ontime/(global_ontime + global_offtime) * 100 ; 
    gchar *str = g_strdup_printf (" %d percent ", global_duty); 
    gtk_label_set_text (GTK_LABEL (duty_out_lab), str); 
    g_free(str); 
    printf ("On time is %d micro seconds\n", global_ontime); 
    printf ("Off time is %d micro seconds\n", global_offtime); 
    printf ("Duty cycle is %d percent \n\n", global_duty); 
} 

static void 
set_ontime (GtkSpinButton *spinbutton, gpointer user_data) 
{ 
    gint value1 = gtk_spin_button_get_value_as_int (spinbutton); 
    global_ontime = value1; 
    set_duty(); 
} 

static void 
set_offtime (GtkSpinButton *spinbutton, gpointer user_data) 
{ 
    gint value2 = gtk_spin_button_get_value_as_int (spinbutton); 
    global_offtime = value2; 
    set_duty(); 
} 

從終端輸出

On time is 1 micro seconds 
Off time is 0 micro seconds 
Duty cycle is 100 percent 

On time is 1 micro seconds 
Off time is 1 micro seconds 
Duty cycle is 0 percent 

On time is 1 micro seconds 
Off time is 2 micro seconds 
Duty cycle is 0 percent 

On time is 2 micro seconds 
Off time is 2 micro seconds 
Duty cycle is 0 percent 

GTK輸出

] 2輸出良好

1輸出壞

+1

請發表您的觀點,而不是您的結論。如果你的程序產生輸出,不要用免費的散文來描述它,而是逐字地複製和粘貼它。 –

+0

在時間爲1微秒 關時間爲0微秒 佔空比是100%的 在時間爲1微秒 關時間爲1微秒 佔空比爲0%的 在時間爲1微秒 關閉時間爲2微秒 佔空比爲0%的 在時間爲2微秒 關閉時間爲2微秒 佔空比爲0%的 – fernny500

+0

當我粘貼它的格式改變 – fernny500

回答

2

第一步:聲明變量global_duty作爲浮點或雙精度。

第二步:通過

global_duty = global_ontime * 1.0/(global_ontime + global_offtime) * 100 ; 

在C,2(一個int)由5(一個int)劃分的結果是0(一個int)和替換行

global_duty = global_ontime/(global_ontime + global_offtime) * 100 ; 

不是0.4(浮動/雙倍)。同樣,在你的情況下,global_duty的值被截斷爲0.如果你想要十進制值作爲答案,使用'float'或'double'數據類型。將分子乘以1.0使得分子的數據類型爲雙。

+0

@ fenny500:接受答案,如果它解決了你的問題 –

+0

它的工作只是好奇,有沒有一種方法來格式化到小數點以下? – fernny500

+0

接受的答案 – fernny500