30.有趣的例子(输入电影名称,并打分)
/* filems1.c -- 使用一个结构数组 */ #include <stdio.h> #include <string.h> #include <stdlib.h> #define TSIZE 45 //定义存储电影名称数组的大小 //定义电影struct struct film { char title[TSIZE]; int rating; }; char * s_gets(char str[], int lim); int main(void) { struct film * movies; int i = 0; int j; int n; puts("Enter the maximum number of movies you'll enter:"); scanf("%d",&n); //n = 3; fpurge(stdin);//清除input stream movies = (struct film *) malloc(n * sizeof(struct film)); puts("Enter first movie title:"); //循环填下电影名称和评分 while(i < n && s_gets(movies[i].title,TSIZE) != NULL && movies[i].title[0] != '\0') { puts("Enter your rating <0-10>:"); scanf("%d",&movies[i++].rating); while(getchar() != '\n') continue; puts("Enter next movie title (empty line to stop):"); } if (i == 0) printf("No data entered."); else printf("Here is the movie list:\n" ); for (j = 0; j < i; j++) printf("Movie: %s Rating: %d\n", movies[j].title, movies[j].rating); printf("Bye!\n" ); return 0; } char * s_gets(char str[], int lim) { char * ret_val; char * find; ret_val = fgets(str,lim, stdin); if (ret_val) { find = strchr(str, '\n'); if (find) *find = '\0'; // else // while (getchar() != '\n') // continue; } return ret_val; } /* 这个案例的启示: 1.fgets 函数 char *fgets(char *str, int n, FILE *stream) 作用:将键盘输入存储的指定数组中 返回值:char * = char *str; */
-- 非动态数组
/* filems1.c -- 使用一个结构数组 */ #include <stdio.h> #include <string.h> #include <stdlib.h> #define TSIZE 45 //定义存储电影名称数组的大小 #define FMAX 5 //定义存储电影的数量 //定义电影struct struct film { char title[TSIZE]; int rating; }; char * s_gets(char str[], int lim); int main(void) { struct film movies[FMAX]; int i = 0; int j; puts("Enter first movie title:"); while(i < FMAX && s_gets(movies[i].title,TSIZE) != NULL && movies[i].title[0] != '\0') { puts("Enter your rating <0-10>:"); scanf("%d",&movies[i++].rating); while(getchar() != '\n') continue; puts("Enter next movie title (empty line to stop):"); } if (i == 0) printf("No data entered."); else printf("Here is the movie list:\n" ); for (j = 0; j < i; j++) printf("Movie: %s Rating: %d\n", movies[j].title, movies[j].rating); printf("Bye!\n" ); return 0; } char * s_gets(char str[], int lim) { char * ret_val; char * find; ret_val = fgets(str,lim, stdin); if (ret_val) { find = strchr(str, '\n'); printf("%p\n", find ); if (find) *find = '\0'; // else // while (getchar() != '\n') // continue; } return ret_val; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界