【转载】while(~scanf("%d", &n))的~的含义

C语言scanf函数详解
本文详细解释了C语言中scanf函数的工作原理,包括其返回值的意义:返回成功读取并转换的数据项数量;若没有输入数据,则返回-1。通过按位取反操作可以将-1转为0实现循环控制。

~是按位取反

scanf的返回值是输入值得个数

如果没有输入值则返回-1

对于-1按位求反得到0

所以如果没有输入则退出循环











转载自【https://github.com/liuchuo】


//3.教师添加新学生 int add_new_student(Stu* pstu) { Stu* pstu_new = (Stu*)malloc(sizeof(Stu)); if (pstu_new == NULL) { printf("pstu_new malloc error\n"); return -1; } char name[10]; //姓名 char passwd[10]; //密码 int num; //学号 char sexy[10]; //性别 Date date = { 0,0,0 }; //出生日期 int math=0; int chinese=0; int english=0; printf("请输入新学生姓名\n"); scanf("%s", name); while (getchar() != '\n'); printf("请输入新学生密码\n"); scanf("%s", passwd); while (getchar() != '\n'); printf("请输入新学生工号\n"); scanf("%d", &num); while (getchar() != '\n'); printf("请输入新学生性别\n"); scanf("%s", sexy); while (getchar() != '\n'); printf("请输入新学生出生年月日,例如1998 4 19\n"); scanf("%d%d%d", &date.x, &date.y, &date.z); while (getchar() != '\n'); printf("请输入新学生数学成绩\n"); scanf("%d", &math); while (getchar() != '\n'); printf("请输入新学生语文成绩\n"); scanf("%d", &chinese); while (getchar() != '\n'); printf("请输入新学生英语成绩\n"); scanf("%d", &english); while (getchar() != '\n'); //新学生初始化 strcpy(pstu_new->name, name); strcpy(pstu_new->passwd, passwd); pstu_new->num = num; strcpy(pstu_new->sexy, sexy); pstu_new->date.x = date.x; pstu_new->date.y = date.y; pstu_new->date.z = date.z; pstu_new->math = math; pstu_new->chinese = chinese; pstu_new->english = english; pstu_new->next = NULL; //新学生节点插入链表(先连后面,再连前面) pstu_new->next = pstu->next; pstu->next = pstu_new; return 0; } ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.youkuaiyun.com/weixin_48071819/article/details/132531545
07-28
5.修改教师信息 int modify_teacher_information(Tea* ptea) { int sel = 0; char name[10]; int flag = 1, pflag = 1; Tea* l = NULL; while (flag) { printf("请输入您想要修改的教师姓名\n"); scanf("%s", name); while (getchar() != '\n'); l = ptea->next; while (l!= NULL) { if (strcmp(l->name, name) == 0) { while(pflag) { printf("*******************************************************\n"); printf("请选择您要修改的信息\n"); printf("1.姓名 2.密码 3.工号 4.性别 5.出生日期 0.返回上一层\n"); scanf("%d", &sel); switch (sel) { case 1: { char new_name[10]; printf("请输入您想要修改的新名字\n"); scanf("%s", new_name); while (getchar() != '\n'); strcpy(l->name, new_name); printf("修改成功\n"); break; } case 2: { char new_passwd[10]; printf("请输入您想要修改的新密码\n"); scanf("%s", new_passwd); while (getchar() != '\n'); strcpy(l->passwd, new_passwd); printf("修改成功\n"); break; } case 3: { int new_num = 0; printf("请输入您想要修改的新工号\n"); scanf("%d",&new_num); l->num = new_num; printf("修改成功\n"); break; } case 4: { char new_sexy[10]; printf("请输入您想要修改的新性别\n"); scanf("%s", new_sexy); while (getchar() != '\n'); strcpy(l->sexy, new_sexy); printf("修改成功\n"); break; } case 5: { Date date = { 0,0,0 }; printf("请输入您想要修改的新出生日期,如1998 4 19\n"); scanf("%d%d%d",&date.x,&date.y,&date.z); while (getchar() != '\n'); l->date.x = date.x; l->date.y = date.y; l->date.z = date.z; printf("修改成功\n"); break; } case 0: /*pflag = 0; flag = 0; break;*/ return; default:printf("错误选择,请重新选择\n"); break; } } } l = l->next; } printf("查无此人!\n"); } return 0; } ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.youkuaiyun.com/weixin_48071819/article/details/132531545
07-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值