第 14 章 结构和其他数据形式(把结构内容保存到…
2018-06-18 03:45:44来源:未知 阅读 ()
1 /*----------------------------------------- 2 booksave.c -- 在文件中保存结构中的内容 3 -----------------------------------------*/ 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 #include <string.h> 8 9 #define MAXTITL 40 10 #define MAXAUTL 40 11 #define MAXBKS 10 //最大书籍数量 12 13 char* s_gets(char *st, int n); 14 15 struct book 16 { 17 char title[MAXTITL]; 18 char author[MAXAUTL]; 19 float value; 20 }; 21 22 int main() 23 { 24 struct book library[MAXBKS]; 25 int index, filecount; 26 FILE *pbooks; 27 28 if ((pbooks = fopen("book.dat", "a+b")) == NULL) 29 { 30 fputs("Can't open book.dat file\n", stderr); 31 exit(EXIT_FAILURE); 32 } 33 34 rewind(pbooks); //定位到文件开始 35 36 int count = 0, size = sizeof(struct book); 37 38 while (count != MAXBKS && fread(&library[count], size, 1, pbooks) == 1) 39 { 40 if (count == 0) 41 puts("Current contents of book.dat:"); 42 43 printf("%s by %s: $%.2f\n" 44 , library[count].title, library[count].author, library[count].value); 45 46 ++count; 47 } 48 49 filecount = count; 50 51 if (count == MAXBKS) 52 { 53 fputs("The book.dat file is full.", stderr); 54 exit(2); 55 } 56 57 puts("Please add new book titles."); 58 puts("Press [enter] at the start of a line to stop."); 59 60 while (count != MAXBKS && s_gets(library[count].title, MAXTITL) != NULL 61 && library[count].title[0] != '\0') 62 { 63 puts("Now enter the author."); 64 65 s_gets(library[count].author, MAXAUTL); 66 67 puts("Now enter the value."); 68 69 scanf("%f", &library[count++].value); 70 71 while (fgetc(stdin) != '\n') continue; //清理输入行 72 73 if (count != MAXBKS) 74 puts("Enter the next title."); 75 } 76 77 if (count > 0) 78 { 79 puts("Here is the list of your books:"); 80 81 for (index = 0; index != count; ++index) 82 printf("%s by %s: $%.2f\n" 83 , library[index].title, library[index].author, library[index].value); 84 85 fwrite(&library[filecount], size, count - filecount, pbooks); 86 } 87 else 88 puts("No books? Too bad.\n"); 89 90 puts("Bye.\n"); 91 fclose(pbooks); 92 93 return 0; 94 } 95 96 char* s_gets(char *st, int n) 97 { 98 char *ret_val, *find; 99 100 if (ret_val = fgets(st, n, stdin)) 101 { 102 if (find = strchr(st, '\n')) 103 *find = '\0'; 104 else 105 while (fgetc(stdin) != '\n') continue; 106 } 107 108 return ret_val; 109 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- C++ 共用体 2020-06-05
- C语言程序结构 2020-05-31
- 数据结构—链表 2020-05-29
- Qt做Tcp数据传输 2020-05-26
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash