(电影程序),数组实现版,cpp568页

#include<stdio.h>
#include<stdlib.h>//
#include<string.h>
#define TSIZE 45
#define FMAX 5
struct film{
	char title[TSIZE];
	int rating;
	struct film * next;
}; 
char * s_gets(char *st,int n)
{
	char * ret_val;
	char * find;
	
	ret_val=fgets(st, n, stdin);//if没到结尾返回首字符的地址 else 返回NULL 
	if(ret_val)//如果非NULL // 这个程序的作用就是如果正常结束时将里面的换行符替换为\0以此来告诉电脑读取结束 
	{						//也具有清空\n的效果 
		find=strchr(st,'\n');//查找'\n'首次出现的位置,并返回char指针 
		if(find)			//if地址不是NULL 就是程序正常读入 
			*find='\0';		//在这个地方放置一个空字符  
		else				//if非正常结束 一个while(getchar)把所有溢出数据处理完
			while(getchar()!='\n')
				continue; 
	}
	return ret_val;
}
int main()
{
	struct film movies[FMAX]; 
	int i=0;
	int j;//movie[i]是结构体数组movie的其中一项,而 movies[i].title是其中的数组名movies[i].title[i]才是char 
	puts("Enter first movie title:");// 单纯的数组名表示这个数字第一个元素的地址,所以是 char* 
	while(i<FMAX && s_gets(movies[i].title,TSIZE)!=NULL&&
	movies[i].title[0]!='\0')//movies[i].title[0]!='\0'是用来读取空输入的,如果空输入则首尾放\0 
	{
		puts("Enter your tating<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!");
	retuen 0;
}
 


知识点:{

1.单纯的数组名表示这个数字第一个元素的地址,所以是 char* (&陈s学长)

2.char * s_gets(char *st,int n)传参是传进的是数组首地址的指针,char * 是返回值类型(迷了好久··无语)

3.find=strchr(st,'\n'); strchr函数,从参数一(char* 数组首元素地址)开始寻找参数二,找到则返回char*,没找到返回NULL

4.(重点)

一. fgets(st, n, stdin);参数一表示要输入的数组(char* 数组首元素地址),参数二是输入char个数(如果溢出也能输入但是每n个中间以\0分隔开)参数三表示输入类型,stdin表示键盘输入;

二. 对应的输出是fputs(st, n, stdout);前俩参数作用一样,stdout表示输出到屏幕;

三. fgets可以有返回值也可以没有,若没有则执行基本操作,若有则分情况,正常输入情况下返回首元素的char*,溢出或非法输入则返回NULL


}

这个程序是链表的第一节,也是一个引子,但还是花了我很长时间去理解,主要是其中的指针几乎是我第一次正面的接触。恩,今天就这样吧,加油!;

(PS:已经不会用。结尾了,全是;;;;ε=(´ο`*)))唉~)

            



猜你喜欢

转载自blog.csdn.net/qq_41660465/article/details/79692587