BSN玄星


私信TA

用户名:dotcpp0632740

访问量:868

签 名:

等  级
排  名 351
经  验 5301
参赛次数 9
文章发表 9
年  龄 13
在职情况 学生
学  校 福清文光中学
专  业

  自我简介:

本题关键在于scanf函数的返回值

scanf()函数返回值分为3种:
(1)返回正整数。表示正确输入参数的个数。
(2)返回整数0。表示用户的输入不匹配,无法正确输入任何值。
(3)返回-1。表示输入流已经结束。在Windows下,用户按下CTRL+Z(会看到一个^Z字符)再按下回车(可能需要重复多次),就表示输入结束;Linux/Unix下使用CTRL+D表示输入结束。

while(~scanf(“%d%d”, &a, &b))
就相当于 scanf(“%d%d”, &a, &b) != EOF
关于~的作用解析:
1、在Windows下,用户按下CTRL+Z(会看到一个^Z字符),会停止输入流,scanf会返回-1。
2、-1的补码为11111111 11111111 11111111 11111111 一共4个字节。
3、~是C语言中的按位取反,因此~(-1)结果为00000000 00000000 00000000 00000000刚好为整数0的补码。
4、因此当输入Ctrl+Z时,scanf会返回-1,while(~-1)==while(0),0为假,退出while循环。

只有~(-1)取反是0
所以作用是只有输入ctrl+z才停止
scanf(“%d%d”, &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF。
此外写成2 == scanf()格式是一种编程风格~防止由于程序员手误写成”=”

getchar(); 不写的话碰到1+1=?会死循环,getchar();遇 到scanf输入异常时 getchar清空缓存区数据;

#include <stdio.h>#include <string.h>#include <iostream>#include <cmath>using namespace std;int main(){    char op;    int a,b,c,k,score=0;    while(~(k=scanf("%d%c%d=%d",&a,&op,&b,&c)))    {        if(4==k)        {            if(op=='+' && c==a+b) score++;            else if  (c==a-b) score++;        }        else        {            getchar();            }    }     printf("%d",score); }


 

0.0分

2 人评分

  评论区

  • «
  • »