1.为什么把那句话注释掉以后输入评分会直接跳出循环?
2.gets(movies[i].title) != NULL && movies[i].title[0] != '\0'这个怎么理解,有什么用,两者有什么区别?
#include <stdio.h>
#define Tsize 45
#define FMAX 2
struct film {
char title[Tsize];
int rating;
};
int main() {
struct film movies[FMAX];
int i = 0;
int j;
puts("Enter first movie title:");
while (i < FMAX && gets(movies[i].title) != NULL && movies[i].title[0] != '\0') {
puts("enter your ratings");
scanf("%d", &movies[i++].rating);
// while (getchar() != '\n'){
// continue;
// }
puts("enter next movies title (empty line to stop)");
}
if (i == 0) {
printf("no data entered ");
} else {
printf("here is the list: \n ");
}
for(j=0;j<i;j++){
printf("movies:%s Rating: %d\n",movies[j].title,movies[j].rating);
}
printf("bye");
}
1、注释掉以后:scanf按照格式化输入`接收了你输入的数字,但是回车符没有接收,而是在标准输入(stdin)缓存里,while中gets函数执行时首先读入了回车符,这时候movies[i].title[0]里面是0,所以while循环不执行
2、gets(movies[i].title) != NULL && movies[i].title[0] != '\0',即成功读取一行输入到movies[i].title(gets读入错误返回NULL)并且串movies[i].title不为空串(即用户只输入了回车)
第个是是防止未输入,第二个是输入的第一个不能为零