小羊也疯狂 2018-03-18 02:22 采纳率: 100%
浏览 867
已采纳

c primer Plus上的一段代码有点看不懂

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");
}
  • 写回答

3条回答 默认 最新

  • sun971782067 2018-03-18 02:42
    关注
    1. scanf方法读取评分后,会把换行符留在缓冲区中,然后在下一次while循环时,gets方法读取到的title就是一个空字符串,也就说movies[i].title[0] != '\0'的结果为false,所以会跳出循环。
    2. gets方法读入成功,返回与参数buffer相同的指针;读入过程中遇到EOF(End-of-File)或发生错误,返回NULL指针。而第二个表示读入的是否是空字符串
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算