A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. #include<stdio.h>
  2. #define TRUE 1

  3. void printscreen()
  4. {
  5. printf("********************************************\n");
  6.     printf("***************1>添加一个学生***************\n");
  7.     printf("***************2>删除一个学生***************\n");
  8.     printf("***************3>查询一个学生***************\n");
  9.     printf("***************4>退出学生系统***************\n");
  10.     printf("********************************************\n");
  11. }

  12. int main()
  13. {
  14.     char order;
  15.     while (TRUE)
  16.     {
  17.         printscreen();
  18.         scanf("%c", &order);
  19.         switch (order)
  20.         {
  21.             case '1':
  22.                 printf("1111\n");
  23.                 break;
  24.             case '2':
  25.                 printf("2222\n");
  26.                 break;
  27.             case '3':
  28.                 printf("3333\n");
  29.                 break;
  30.             case '4':
  31.                 exit(1);
  32.                 break;
  33.             default:
  34.                 printf("输入有误\n");
  35.                 break;
  36.         }
  37.     }
  38.     return 0;
  39. }
复制代码

6 个回复

倒序浏览
输入字符‘4’时,exit(1)并不跳出程序,而是相当于return 1;  不足之处望指正,谢谢
回复 使用道具 举报
darewolf 发表于 2015-3-16 23:25
输入字符‘4’时,exit(1)并不跳出程序,而是相当于return 1;  不足之处望指正,谢谢 ...

还有其他问题吗?
回复 使用道具 举报
果然是经典问题。
回复 使用道具 举报
太经典  完全看不懂
回复 使用道具 举报
1>首先是一条警告:incompatible implicit declaration of built-in function 'exit',添加#include <stdlib.h>即可解决;
2>然后编译无误后,运行会发现每次输入一个值退出switch选择后再到while执行printscreen函数,之后会在用户没额外输入值的情况下执行了switch的default语句。用户没有额外输入按理说应该会卡在那里等待输入才对,那么既然他往下执行了说明有值给了scanf且不是1、2,、3、4的值,那只能是执行default,所以每次都会输出“输入有误”。那到底是给了scanf什么值呢?我把default改了一下printf("order = %d\n", order);发现order的是10,查了下ASCII码表发现10代表换行,好了明白了,是因为结束switch循环后在执行scanf的时候在用户没有输入值的情况下其实scanf接受了键盘缓存的换行符那么自然会执行default语句了,哈哈哈;
3>另外,exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS(操作系统),这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出,非0 为非正常退出。不过这里在main函数下调用效果确实和上面darewolf提到的一样,和 return 1; 差不多。
好了我能看出的就这些了,其他问题继续交流哈
回复 使用道具 举报
baby14 金牌黑马 2018-8-20 07:45:22
7#
多谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马