题目很简单但是有一个挺好的知识点
问题 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 ;
}