2015-09-19 68 views
1

我正在嘗試編寫檢查日期[僅日期和月份]有效性的代碼,將日期[日期和月份]輸入到「日期」結構中,然後最終檢查該代碼實際上做了我期望它在測試功能中做的事情,如果成功則打印「SUCCESS」,否則打印「FAILURE」;測試函數不工作C編程

我已經試過了一切,並不能想到問題可能是什麼;我沒有收到警告,所以調試器沒有幫助。代碼編譯並運行,但是,屏幕上沒有任何內容可以讓我知道它是否在工作,

任何反饋將不勝感激,謝謝!

#include <stdio.h> 
#include <stdlib.h> 
#include "PatientData.h" 
#define INVALID -100 
#define SUCCESS 0 

int main() 

{ 

int datechecker(int month, int day) { 
    int ret = SUCCESS; 
    month = 2; 
    day = 2; 
    if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 
      || month == 10 || month == 12) 
    { 
     if(!(day >= 1 && day <= 31)) 
      ret = INVALID; 
    } 
    else if (month == 4 || month == 6 || month == 9 || month == 11) 
    { 
     if(!(day >= 1 && day < 31)) 
      ret = INVALID; 
    } 

    else 
    { 
     ret = INVALID; 
    } 
return(ret); 
} 


Date CreateDate(int day, int month) 
{ 

Date date; 

int ret = datechecker(2,2); 
if (ret == SUCCESS) 
{ 
date.Day = day; 
date.Month = month; 
} 
else 
{ 
    date.Day = INVALID; 
} 

return date; 

} 


void CreateDateTest() 
{ 
Date date = CreateDate(2,2); 
if (date.Day == 2) 
{ 
    printf("PASSED"); 
} 
else 
{ 
    printf("FAILED"); 
} 
} 

return 0; 
} 
+0

看起來你不可能在二月有一個約會;它將永遠是無效的。可惜你迫使日期到2月2日。 –

+1

猜你是不是閏年的粉絲? –

+0

大聲笑,拍,甚至沒有意識到我使用二月,並沒有在代碼中包括它; GD IT !!!!!! 將回報 – Zeus

回答

2

瞧,你裏面main定義了三個函數,稱爲CreateDateCreateDateTestdatechecker。然而,main內部的唯一可執行語句是return 0,這是您的程序忠實地執行的操作。

您的代碼無法運行,因爲PatientData.h不可用,但我懷疑在您從main撥打CreateDateTest後,它就會起作用。

+1

[嵌套函數不是標準C](http:// stackoverflow。 COM /問題/ 2608158 /嵌套函數在-C)。 GCC允許它們作爲擴展,但似乎不太可能這是OP真正想要的東西。 –

+0

我創建了一個頭文件,並將其包含在我定義函數[與問題中的代碼相同]的腳本中,以及它們的功能,以及具有我的測試功能的腳本; 但是,對於包含我的測試功能的腳本[與上面代碼中的測試功能相同, – Zeus

+0

@Zeus:即使您使用(意外)非標準功能,仍然必須在執行它們之前調用功能。由於您必須使用GCC,所以值得在編譯時添加警告選項。你可能會考慮'gcc -O3 -g -std = c11 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes -Wold-style-definition -Werror ...'的優點。他們要求很高,但他們也防止了很多問題。添加'pedantic'和'-Wshadow'也可以有所幫助。 –