while (~scanf("%d%d",&m,&n)) 浅析

来源:互联网 发布:上海巨人网络校园招聘 编辑:程序博客网 时间:2024/05/01 11:17
最近在恶补ACM,在一个韩信点兵的小程序中纠结了很久,最终在网上找到了答案。
先来看题目:
相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人
一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入包含多组
数据,每组数据包含3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<
7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100。输入到文件
结束为止。
样例输入:
2 1 6
2 1 3
样例输出:
Case 1: 41
Case 2: No answer
示例程序:
#define LOCAL#include<stdio.h>int main(){#ifdef LOCALfreopen("data.in","r",stdin);freopen("data.out", "w",stdout);#endifint i,a,b,c,mark=0;while(~scanf("%d%d%d", &a,&b,&c)){for(i = 10;i<=100;++i){if(i%3==a&&i%5==b&&i%7==c){printf("Case%d:%d\n",++mark,i);break;}}if(i==101){printf("Case%d:No answer\n",++mark);}}return 0;} 
  

其中,~scanf("%d%d%d", &a,&b,&c)的作用是循环从输入流读取m和n,直到遇到EOF为止,等同于while (scanf("%d%d",&m,&n)!=EOF)。EOF是读取到文件末尾scanf返回的值

原创粉丝点击