demo_3_10
1 #define _CRT_SECURE_NO_WARNINGS 1 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <stddef.h> 5 #include <errno.h> 6 7 struct S 8 { 9 int n; 10 float score; 11 char arr[10]; 12 }; 13 int main() 14 { 15 struct S s = { 100, 3.14f, "bit" }; 16 FILE* pf = fopen("test.txt", "w"); 17 if (pf == NULL) 18 { 19 return 0; 20 } 21 //格式化的形式写文件 22 fprintf(pf, "%d %f %s", s.n, s.score, s.arr); 23 24 //关闭文件 25 fclose(pf); 26 pf = NULL; 27 system("pause"); 28 return 0; 29 } 30 31 32 struct S 33 { 34 int n; 35 float score; 36 char arr[10]; 37 }; 38 int main() 39 { 40 struct S s = { 100, 3.14f, "bit" }; 41 FILE* pf = fopen("test.txt", "w"); 42 if (pf == NULL) 43 { 44 return 0; 45 } 46 //格式化输入数据 47 //scanf("%d %f %s", &(s.n), &(s.score), &(s.arr)); 48 fscanf(pf, "%d %f %s", s.n,s.score,s.arr); 49 //关闭文件 50 fclose(pf); 51 pf = NULL; 52 system("pause"); 53 return 0; 54 } 55 56 57 struct S 58 { 59 int n; 60 float score; 61 char arr[10]; 62 }; 63 int main() 64 { 65 struct S s = { 0 }; 66 fscanf(stdin, "%d %f %s", &(s.n), &(s.score), s.arr); 67 fprintf(stdout, "%d %f %s", s.n, s.score, s.arr); 68 system("pause"); 69 return 0; 70 } 71 72 73 struct S 74 { 75 int n; 76 float score; 77 char arr[10]; 78 }; 79 int main() 80 { 81 struct S s = { 100, 3.14f, "abcdefg" }; 82 struct S tmp = { 0 }; 83 char buf[1024] = { 0 }; 84 //把格式化的数据转换成字符串存储到buf 85 sprintf(buf, "%d %f %s", s.n.s.score, s.arr); 86 //从buf中读取格式化的数据到字符串中 87 sscanf(buf, "%d %f %s", &(tmp.n), &(tmp.score), tmp.arr); 88 printf("%d %f %s\n", tmp.n, tmp.score, tmp.arr); 89 system("pause"); 90 return 04; 91 } 92 93 94 struct S 95 { 96 char name[20]; 97 int age; 98 double score; 99 }; 100 int main() 101 { 102 struct S s = { "张三", 20, 80.5 }; 103 104 FILE* pf = fopen("test.txt", "w"); 105 if (pf == NULL) 106 { 107 return 0; 108 } 109 //二进制文件写文件 110 fwrite(&s, sizeof(struct S), 1, pf); 111 //关闭文件 112 fclose(pf); 113 pf = NULL; 114 system("pause"); 115 return 0; 116 } 117 118 struct S 119 { 120 char name[20]; 121 int age; 122 double score; 123 }; 124 int main() 125 { 126 struct S s = { "张三", 20, 80.5 }; 127 struct S tmp = { 0 }; 128 129 FILE* pf = fopen("test.txt", "rb"); 130 if (pf == NULL) 131 { 132 return 0; 133 } 134 //二进制文件读文件 135 fread(&tmp, sizeof(struct S), 1, pf); 136 printf("%s %d %lf\n", tmp.name, tmp.score, tmp.age); 137 138 //关闭文件 139 fclose(pf); 140 pf = NULL; 141 system("pause"); 142 return 0; 143 } 144 145 146 int main() 147 { 148 FILE* pf = fopen("test.txt", "r"); 149 if (pf == NULL) 150 { 151 return 0; 152 } 153 //1.定位文件指针 154 fseek(pf, 2, SEEK_CUR);//从当前位置偏移2个字符 155 //fseek(pf, 2, SEEK_END);//从末尾位置偏移2个字符 156 //fseek(pf, 2, SEEK_SET);//从开始位置偏移2个字符 157 //2.读取文件 158 int ch = fgetc(pf); 159 printf("%c\n", ch); 160 //关闭文件 161 fclose(pf); 162 pf = NULL; 163 system("pause"); 164 return 0; 165 } 166 167 int main() 168 { 169 FILE* pf = fopen("test.txt", "r"); 170 if (pf == NULL) 171 { 172 return 0; 173 } 174 //读取一个 175 fgetc(pf); 176 //1.定义文件指针 177 int pos = ftell(pf); 178 printf("%d\n", pos); 179 180 //关闭文件 181 fclose(pf); 182 pf = NULL; 183 system("pause"); 184 return 0; 185 } 186 187 //rewind - 让文件指针的位置回到文件的起始位置 188 int main() 189 { 190 FILE* pf = fopen("test.txt", "r"); 191 if (pf == NULL) 192 { 193 return 0; 194 } 195 //定位文件指针 196 //fseek(pf,-2,SEEK_END); 197 int ch = fgetc(pf); 198 printf("%c\n", ch); 199 rewind(pf); 200 fgetc(pf); 201 fclose(pf); 202 pf = NULL; 203 system("pause"); 204 return 0; 205 } 206 207 int main() 208 { 209 //EOF - end of file - 文件结束标志 210 feof(); 211 FILE* pf = fopen("test.txt", "r"); 212 if (pf == NULL) 213 { 214 return 0; 215 } 216 int ch = fgetc(pf); 217 printf("%d\n", ch);//-1 218 fclose(pf); 219 pf = NULL; 220 system("pause"); 221 return 0; 222 } 223 224 int main() 225 { 226 //strerror - 把错误码对应的错误信息的字符串地址返回 227 printf("%s\n",strerror(errno)); 228 //perror - 输出对应的错误码并提示找不到的文件 229 FILE* pf = fopen("test2.txt", "r"); 230 if (pf == NULL) 231 { 232 perror("open file test2.txt"); 233 return 0; 234 } 235 //读文件 236 237 //关闭文件 238 fclose(pf); 239 pf = NULL; 240 system("pause"); 241 return 0; 242 } 243 244 int main() 245 { 246 //strerror - 把错误码对应的错误信息的字符串地址返回 247 printf("%s\n", strerror(errno)); 248 //perror - 输出对应的错误码并提示找不到的文件 249 FILE* pf = fopen("test2.txt", "r"); 250 if (pf == NULL) 251 { 252 perror("open file test2.txt"); 253 return 0; 254 } 255 //读文件 256 int ch = 0; 257 while ((ch=fgetc(pf))!=EOF) 258 { 259 putchar(ch); 260 } 261 if (ferror(pf)) 262 { 263 printf("error\n"); 264 } 265 else if (feof(pf)){ 266 printf("end of file\n"); 267 } 268 //关闭文件 269 fclose(pf); 270 pf = NULL; 271 system("pause"); 272 return 0; 273 } 274 275 int main() 276 { 277 int arr[10] = { 0 }; 278 int i; 279 for (i = 0; i < 10; i++) 280 { 281 arr[i] = i; 282 } 283 for (i = 0; i < 10; i++) 284 { 285 printf("%d ", arr[i]); 286 } 287 288 system("pause"); 289 return 0; 290 } 291 292 293 int main() 294 { 295 //printf("%s\n", __FILE__);//代码所在的地址 296 //printf("%d\n", __LINE__);//代码所在的行号 297 //printf("%s\n", __DATE__);//代码所在的日期 298 //printf("%s\n", __TIME__);//代码所在的时间 299 //写日志文件 300 int i; 301 int arr[10] = { 0 }; 302 FILE* pf = fopen("log.txt", "w"); 303 for (i = 0; i < 10; i++) 304 { 305 arr[i] = i; 306 fprintf(pf, "file:%s line:%d date:%s time:%s i=%d\n", __FILE__, __LINE__, __DATE__, __TIME__, i); 307 printf("%s\n", __FUNCTION__);//打印函数的预定义符号 308 } 309 fclose(pf); 310 pf = NULL; 311 for (i = 0; i < 10; i++) 312 { 313 printf("%d ", arr[i]); 314 } 315 system("pause"); 316 return 0; 317 } 318 319 //int main() 320 //{ 321 // printf("%d\n", __STDC__); 322 // system("pause"); 323 // return 0; 324 //} 325 326 #define MAX 100 327 #define STR "hehe" 328 #define reg register 329 #define do_forever for(;;) 330 int main() 331 { 332 do_forever; 333 reg int a; 334 register int a; 335 int max = MAX; 336 printf("%d\n", max); 337 printf("%s\n", STR); 338 system("pause"); 339 return 0; 340 } 341 342 int main() 343 { 344 int a = 10; 345 int b = a + 1; 346 int b = ++a; 347 system("pause"); 348 return 0; 349 } 350 351 352 #define MAX(X,Y) ((X)>(Y)?(X):(Y)) 353 int main() 354 { 355 int a = 10; 356 int b = 11; 357 int max = MAX(a++, b++);//带有副作用 358 //等价于int max = MAX((a++) > (b++) ? (a++) : (b++)); 359 printf("%d\n", max); 360 printf("%d\n", a); 361 printf("%d\n", b); 362 system("pause"); 363 return 0; 364 } 365 366 #define MAX(X,Y) ((X)>(Y)?(X):(Y)) 367 int main() 368 { 369 int a = 10; 370 int b = 11; 371 int max = MAX(a+3, b+3); 372 printf("%d\n", max); 373 printf("%d\n", a); 374 printf("%d\n", b); 375 system("pause"); 376 return 0; 377 } 378 379 380 //函数的形式 381 int Max(int x, int y) 382 { 383 return (x > y ? x : y); 384 } 385 //宏的形式 386 #define MAX(X,Y) ((X)>(Y)?(X):(Y)) 387 int main() 388 { 389 int a = 10; 390 int b = 20; 391 //函数在调用的时候 392 //会有函数调用和返回的开销 393 //函数调用需要一定的时间,效率低一些 394 int max = Max(a, b); 395 //宏-在预处理阶段就完成了替换,没有函数的调用和返回的开销,效率更高一些 396 max = MAX(a, b); 397 printf("%d\n", max); 398 printf("%d\n", max); 399 system("pause"); 400 return 0; 401 } 402 403 404 #define TEST(x,y) printf("test\n") 405 int main() 406 { 407 TEST(); 408 TEST(); 409 TEST(); 410 system("pause"); 411 return 0; 412 } 413 414 #define SIZEOF(type) sizeof(type) 415 int main() 416 { 417 //宏可以传类型 418 int ret = SIZEOF(int); 419 int ret = sizeof(int); 420 printf("%d\n", ret); 421 system("pause"); 422 return 0; 423 } 424 425 #define MALLOC(num,type) (type*)malloc(num*sizeof(type)) 426 int main() 427 { 428 int* p = (int*)malloc(10 * sizeof(int)); 429 int* p = MALLOC(10, int); 430 } 431 432 433 #define MAX 100 434 int main() 435 { 436 printf("MAX=%d\n", MAX); 437 #undef MAX //移除一个宏定义 438 system("pause"); 439 return 0; 440 } 441 442 443 #define DEBUG 444 int main() 445 { 446 int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 447 int i = 0; 448 for (i = 0; i < 10; i++) 449 { 450 arr[i] = 0; 451 #ifdef DEBUG //某个条件满足就编译,不满足就不编译 452 printf("%d ", arr[i]); 453 #endif 454 } 455 } 456 457 458 //单分支 459 int main() 460 { 461 int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 462 int i = 0; 463 for (i = 0; i < 10; i++) 464 { 465 arr[i] = 0; 466 #if 1-1 467 printf("%d ", arr[i]); 468 #endif 469 } 470 } 471 472 473 //多分支 474 int main() 475 { 476 #if 1==1 477 printf("haha\n"); 478 #elif 2==1 479 printf("hehe\n"); 480 #else 481 printf("heihei\n"); 482 #endif 483 return 0; 484 } 485 486 487 #define DEBUG 0 488 int main() 489 { 490 #if defined(DEBUG) //定义了就打印hehe,否则什么也不打印 491 printf("hehe\n"); 492 #endif 493 return 0; 494 } 495 //等价于 496 #define DEBUG 0 497 int main() 498 { 499 #ifdef DEBUG //定义了就打印hehe,否则什么也不打印 500 printf("hehe\n"); 501 #endif 502 return 0; 503 } 504 505 int mian() 506 { 507 #if !defined(DEBUG) //没有定义就打印,否则就不打印 508 printf("hehe\n"); 509 #endif 510 return 0; 511 } 512 513 int main() 514 { 515 #ifdef DEBUG //没有定义就打印,否则就不打印 516 printf("hehe\n"); 517 #endif 518 return 0; 519 } 520 521 522 523 struct S 524 { 525 char c1; 526 int a; 527 char c2; 528 }; 529 #define OFFSETOF(struct_name,member_name) (int)&(((struct_name*)0)->member_name) 530 int main() 531 { 532 struct S s; 533 printf("%d\n", OFFSETOF(struct S, c1)); 534 printf("%d\n", OFFSETOF(struct S, a)); 535 printf("%d\n", OFFSETOF(struct S, c2)); 536 system("pause"); 537 return 0; 538 }