zoukankan      html  css  js  c++  java
  • P5712 【深基3.例4】Apples 题解

    有关三目运算符总目录点这里

    三目运算符大法好

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #define ll long long
    #define re register
    using namespace std;
    inline int read()
    {
        int x=0,f=1; char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int x;
    char c1[5]={'a','p','p','l','e'};
    char p1[6]={'a','p','p','l','e','s'};
    int main()
    {
        x=read();
        printf("Today, I ate %d %s.",x,x>=2?p1:c1);
    }

    完结。


    个鬼啊?这题没完呢;

    这里涉及很重要的知识:

    这份代码的输出以及判定条件没问题,char数组确认没问题,但是,当我们带入1的时候,我们会发现系统给我们了这样一个答案:

     再确认一遍,三目运算符判定没有问题。

    于是我叫来了同机房的巨佬们一起研究错在哪里,甚至通过摄像头惊动了教练

    然而没找出来哪里错了。

    后来多方求助,找了出来:

    c1,p1数组开小了,我开的是正好卡大小上界的。然而在这个字符串的结尾会自动保存一个作为结束符号。而我的数组恰恰少了那一个符号,于是在访问的时候,内存访问溢出了,访问到下一个字符串的存储地址(很明显系统把他俩的内存地址安排到一块了),就认定为一个字符串一起输出了。。。

    打个红题还能找出自己基础知识的不足

    正确代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #define ll long long
    #define re register
    using namespace std;
    inline int read()
    {
        int x=0,f=1; char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int x;
    char c1[10]={'a','p','p','l','e'};//开大一点没坏处
    char p1[10]={'a','p','p','l','e','s'};
    int main()
    {
        x=read();
        printf("Today, I ate %d %s.",x,x>=2?p1:c1);
    }

    真正完结撒花。

  • 相关阅读:
    MOCK服务小结
    微信收款「商业版」与「个人版」有什么区别?看完这篇你就懂!
    LB 负载均衡的层次结构
    中兴应用之星携手天翼开放平台:让APP开发更简单
    常见面试题之二叉树
    【深入JAVA EE】Spring配置文件解析
    spring-struts-mybatis整合错误集锦
    Redis安装
    Atitit.ati&#160;dwr的原理and设计&#160;attilax&#160;总结&#160;java&#160;php&#160;版本号
    Android UI开发神兵利器之Icon
  • 原文地址:https://www.cnblogs.com/lbssxz/p/13121648.html
Copyright © 2011-2022 走看看