L1-025 正整数A+B(水题)+scanf(“%[^ ]“)的应用

L1-025 正整数A+B(水题)+scanf("%[^ ]")的应用

知识点:

用scanf输入带有空格的字符串

“%[]”格式可以用 ^+任意字符来结束字符串的输入

#include <bits/stdc++.h>
using namespace std;

int main(){
    
    
    char str[100];
    scanf("%[^\n]",str);
    //直到读入回车键,读取才结束
    //(可以有效替代gets,解决gets无法编译通过的问题)
    printf("%s\n",str);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VwfbjWtT-1617434715022)(https://i.loli.net/2021/04/03/XARVZECnadv8wML.png)]

getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)

按题目要求,两个字符串之间以一个空格想隔开,所以用getchar()把该空格从输入缓冲区读走,从而不影响第二个字符串

蒟蒻自己:

校内团队赛选拔的时候这个死活只过了三个测试点,怎么改都没过,后面发现自己想多了,记录一下自己的傻x时刻

题面

题的目标很简单,就是求两个正整数AB的和,其中AB都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。

输入格式:

输入在一行给出AB,其间以空格分开。问题是AB不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是AB的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

输出格式:

如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?

输入样例1:

123 456

输出样例1:

123 + 456 = 579

输入样例2:

22. 18

输出样例2:

? + 18 = ?

输入样例3:

-100 blabla bla...33

输出样例3:

? + ? = ?

代码

注意:

123 3 4这种情况输出结果仍为123 + ? = ?

哪怕都为正整数,也要注意范围(1<=x<=1000)

#include <bits/stdc++.h>
using namespace std;

int main(){
    
    
    char s1[1000],s2[1000];
    int sum1=0,sum2=0;
    int len1,len2;
    bool flag1=true,flag2=true;
    scanf("%s",s1);
    len1 = strlen(s1);
    for(int i=0;i<len1;++i){
    
    
        if(s1[i]>'9'||s1[i]<'0')
            flag1=false;
    }
    if(flag1){
    
    
        for(int i=0;i<len1;++i){
    
    
            sum1 = sum1*10+s1[i]-'0';
        }
    }
    getchar();
    scanf("%[^\n]",s2);
    len2 = strlen(s2);
    for(int i=0;i<len2;++i){
    
    
        if(s2[i]>'9'||s2[i]<'0')
            flag2=false;
    }
    if(flag2){
    
    
        for(int i=0;i<len2;++i){
    
    
            sum2 = sum2*10+s2[i]-'0';
        }
    }
    if(flag1&&sum1>=1&&sum1<=1000)
        cout<<sum1<<" + ";
    else
        cout<<"? + ";
    if(flag2&&sum2>=1&&sum2<=1000)
        cout<<sum2<<" = ";
    else
        cout<<"? = ";
    if(flag1&&sum1>=1&&sum1<=1000 && flag2&&sum2>=1&&sum2<=1000)
        cout<<sum1+sum2;
    else
        cout<<"?";
}

猜你喜欢

转载自blog.csdn.net/m0_51344172/article/details/115416599
今日推荐