天天看点

问题 1000: [竞赛入门]简单的a+b scanf 和 cin中的特殊用法

题目很简单但是有一个挺好的知识点

问题 1000: [竞赛入门]简单的a+b

时间限制: 1Sec 内存限制: 128MB 提交: 43301 解决: 20493

题目描述

输入两个整数a和b,计算a+b的和

注意此题是多组测试数据

输入

输入两个整数A和B

范围不超过2^10

输出

求A+B

样例输入

1 1
10 20
           

样例输出

2
30
           

提示

训练场入门:蓝桥杯ACM基本输入输出教程

题目是非常简单的,但是有一个比较头痛的事情就是输入的内容是不确定的。对于不确定的输入内容如何通过输入函数解决呢

首先通过学习发现对于这些输入内容不确定的题目主要根据scanf函数的返回值来确定的。

经过分析,发现scanf函数返回值和输入的内容有关,如scanf("%d%d",&a,&b)输入数值后返回的数值是2,由此延伸出一个出来方法一

# include<stdio.h>

int main(){

    int a=0 , b =0 ; 

    while(scanf("%d%d",&a,&b)==2)//当判断输入的内容是两个整数的时候进行运算 

    {

        printf("%d\n",a+b);

    }    

    return 0 ;

与此同时偷师了一波,偷师内容:

scanf()函数返回值分为3种:

(1)返回正整数。表示正确输入参数的个数。

(2)返回整数0。表示用户的输入不匹配,无法正确输入任何值。

(3)返回-1。表示输入流已经结束。在Windows下,用户按下CTRL+Z(会看到一个^Z字符)再按下回车(可能需要重复多次),就表示输入结束;Linux/Unix下使用CTRL+D表示输入结束。

(重点,重点,重点!!!!!!!!!!作笔记了!!!!)

关于~的作用解析:

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循环。

什么意思呢其实就是如果不清楚 接收多少内容的情况下,通过使用“while(~scanf(""))”可以完成不确定内容的输入,如果不知道需要接收多少行信息的时候,可以参考这个方式。样例

# include<stdio.h>

int main(){

    char a[1000] , b =0 ; 

    while(~scanf("%s",&a)){//输入字符串,判断是否由输入的内容有的话执行判断,如果输入内容结束(ctrl+z停止输入流,不是回车)将结束循环

        cout<<a<<endl;//循环中的a会被覆盖需要保持的话需要单独处理

    }   

    return 0 ;

还研究了一下c++的使用方法

# include <iostream>

using namespace std ;

int main(){

    char a[1000] , b =0 ; 

    while(cin>>a){//当输入流结束的时候结束循环

        cout<<a<<endl;

    }    

    return 0 ;

继续阅读