DEBUG NDEBUG
trace(),assert()都只是在DEBUG的模式下才起作用的,如果定义了NDEBUG,编译器会认为是非DEBUG的模式(虽然编译出来的程序还是很大,而且还可以进行调试),此时trace(),assert()就没有用了.就如同你编译成release版的时候这些没有用一样.
else与最近的if配对
switch 中的case val: val的值不能为浮点数,只能为字符或整数,如为字符串则用函数strncmp(str1,str2,n);
1 #ifndef __HEAD_H__ 2 #define __HEAD_H__ 3 //.h中的内容 4 5 #endif<`0`> 6 7 8 printf("%03d",num); //输出占用3个数字宽度,右对齐,不足的补0
1 /*打印某一年的日历*/ 2 3 #include <stdio.h> 4 #include <string.h> 5 #include <stdlib.h> 6 7 #define BEGIN 1899 8 #define LINE_BG "| " 9 #define IS_LEAP(year) (year%400==0 || year%4==0&&year%100!=0) 10 #define WEEK_FORMOT "|%2d SUM MON TUE WED TUR FRI SAT %2d SUM MON TUE WED TUR FRI SAT |\n" 11 static int get_day_of_year(int mon,int year) 12 { 13 int sum = 0; 14 int index; 15 for(index = 1;index < mon;index++) 16 { 17 switch(index) 18 { 19 case 1: 20 case 3: 21 case 5: 22 case 7: 23 case 8: 24 case 10: 25 case 12: sum +=31;break; 26 case 4: 27 case 6: 28 case 9: 29 case 11:sum += 30;break; 30 case 2:if(IS_LEAP(year)) 31 { 32 sum += 29; 33 }else 34 { 35 sum += 28; 36 } 37 } 38 } 39 return sum; 40 } 41 int get_day_of_mon(int mon,int year) 42 { 43 switch(mon) 44 { 45 case 1: 46 case 3: 47 case 5: 48 case 7: 49 case 8: 50 case 10: 51 case 12: return 31; 52 case 4: 53 case 6: 54 case 9: 55 case 11: return 30; 56 case 2:if(IS_LEAP(year)) 57 { 58 return 29; 59 }else{ 60 return 28; 61 } 62 } 63 } 64 static int get_week(int mon,int year) 65 { 66 int index; 67 int sum = 0; 68 for(index = BEGIN;index < year;index++) 69 { 70 if(IS_LEAP(index)) 71 { 72 sum+=366; 73 } 74 else { 75 sum +=365; 76 } 77 } 78 sum += get_day_of_year(mon,year); 79 return sum%7; 80 } 81 82 void show(int mon,int year) 83 { 84 int week1,week2; 85 int day1_max,day2_max; 86 int day1 = 1,day2 = 1; 87 int space_cnt; 88 week1 = get_week(mon,year); 89 week2 = get_week(mon+6,year); 90 day1_max = get_day_of_mon(mon,year); 91 day2_max = get_day_of_mon(mon+6,year); 92 printf(WEEK_FORMOT,mon,mon+6); 93 //line 1 94 printf(LINE_BG); 95 space_cnt = 0; 96 while(space_cnt < week1) 97 { 98 printf(" "); 99 space_cnt++; 100 } 101 for(;week1<=6 && day1<=day1_max;week1++) 102 { 103 printf("%3d ",day1); 104 day1++; 105 } 106 107 week1 = 0; 108 space_cnt = 0; 109 while(space_cnt < week2) 110 { 111 printf(" "); 112 space_cnt++; 113 } 114 printf(" "); 115 for(;week2<=6 && day2<day2_max;week2++) 116 { 117 printf("%3d ",day2); 118 day2++; 119 } 120 week2 = 0; 121 printf("|\n"); 122 123 //line2 124 printf(LINE_BG); 125 for(;week1<=6&&day1<=day1_max ;week1++) 126 { 127 printf("%3d ",day1); 128 day1++; 129 } 130 week1 = 0; 131 printf(" "); 132 for(;week2 <= 6&& day2<=day2_max;week2++) 133 { 134 printf("%3d ",day2); 135 day2++; 136 } 137 week2 = 0; 138 printf("|\n"); 139 140 //line3 141 printf(LINE_BG); 142 for(;week1 <=6&&day1<=day1_max;week1++) 143 { 144 printf("%3d ",day1); 145 day1++; 146 } 147 week1 = 0; 148 printf(" "); 149 for(;week2<=6 && day2 <= day2_max;week2++) 150 { 151 printf("%3d ",day2); 152 day2++; 153 } 154 week2 = 0; 155 printf("|\n"); 156 157 //line4 158 printf(LINE_BG); 159 for(;week1 <=6&&day1<=day1_max;week1++) 160 { 161 printf("%3d ",day1); 162 day1++; 163 } 164 week1 = 0; 165 printf(" "); 166 for(;week2<=6 && day2 <= day2_max;week2++) 167 { 168 printf("%3d ",day2); 169 day2++; 170 } 171 week2= 0; 172 printf("|\n"); 173 174 //line 5 175 printf(LINE_BG); 176 for(;week1<=6&&day1<=day1_max;week1++) 177 { 178 printf("%3d ",day1); 179 day1++; 180 } 181 while(week1<=6) 182 { 183 printf(" "); 184 week1++; 185 } 186 week1 = 0; 187 printf(" "); 188 for(;week2 <=6 && day2<=day2_max;week2++) 189 { 190 printf("%3d ",day2); 191 day2++; 192 } 193 while(week2<=6) 194 { 195 printf(" "); 196 week2++; 197 } 198 week2 = 0; 199 printf("|\n"); 200 201 //line 6 202 if(day1 <= day1_max || day2 <=day2_max ) 203 { 204 printf(LINE_BG); 205 for(;week1<=6 && day1 <=day1_max ;week1++) 206 { 207 printf("%3d ",day1); 208 day1++; 209 } 210 while(week1 <=6) 211 { 212 printf(" "); 213 week1 ++; 214 } 215 week1 = 0; 216 printf(" "); 217 for(;week2 <= 6&&day2 <=day2_max;week2++) 218 { 219 printf("%3d ",day2); 220 day2++; 221 } 222 while(week2<=6) 223 { 224 printf(" "); 225 week2++; 226 } 227 week2 = 0; 228 printf("|\n"); 229 } 230 } 231 232 int main(int argc,char* argv[]) 233 { 234 int year; 235 int i; 236 while(fflush(stdin),(scanf("%d",&year))!=EOF) 237 { 238 for(i=1;i<6;i++) 239 show(i,year); 240 } 241 return 0; 242 }