本人向同學借鑒了一個有關于時差換算的代碼,如下:
#include <stdio.h>
int main()
{
int hour1,minute1;
int hour2,minute2;
printf("請輸入你想要進行換算的兩個時間:\n");
scanf("%d %d",&hour1,&minute1);
scanf("%d %d",&hour2,&minute2);
int t1=hour1*60+minute1;
int t2=hour2*60+minute2;
int t=t2-t1;
printf("你所輸入的兩地的時差是%d小時%d分鐘",t/60,t%60);
return 0;
}
該段代碼可以進行兩個時間的時差換算,運行結果如下:

但如通過多組資料的試驗,發現有一個小bug,當輸入的第一個資料時間晚于第二個資料的時候,就會出現輸出時差為負數的情況發生,如圖:

因為在我們的日常生活中,時間差只是兩個時間的差值,所以是一個標量而并不是向量,所以不應該有負數的發生,
這種情況是我們不想遇到的,所以我們應該加入一個判斷陳述句,對所輸入的資料進行判斷,以此來避免該情況的發生,
所以我加入了兩端判斷陳述句,如圖:
if(hour2>hour1){
ih=hour2-hour1;
im=minute2-minute1;
if(im<-0){
im=60+im;
ih --;
}
}
if(hour2<hour1){
ih=hour2-hour1;
im=minute1-minute2;
if(ih<-0){
ih ++;
im=60+im;
}
}
這兩段代碼,對所輸入的時間的數字進行了比較,以保證讓所輸出的時間差為正數,
所以優化后的代碼如下圖:
#include <stdio.h>
int main()
{
int hour1,minute1;
int hour2,minute2;
int im,ih;
printf("請輸入你想要進行換算的兩個時間:\n");
scanf("%d %d",&hour1,&minute1);
scanf("%d %d",&hour2,&minute2);
if(hour2>hour1){
ih=hour2-hour1;
im=minute2-minute1;
if(im<-0){
im=60+im;
ih --;
}
}
if(hour2<hour1){
ih=hour2-hour1;
im=minute1-minute2;
if(ih<-0){
ih ++;
im=60+im;
}
}
printf("您說輸入的時差為%d時%d分,\n",ih,im);
return 0;
}
這樣我們就可以避免上述情況的發生,
測驗情況如下:


這樣我們就可以避免上述情況的發生,無論所輸入的兩個資料具備怎樣的關系,都可以正確的輸出所需要的答案,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/266891.html
標籤:C
