2301_79861214 2024-03-23 15:04 采纳率: 89.5%
浏览 4
已结题

为什么数据会自己改变 哪里出了问题

img

img

为什么输入之后数据会自己改了呢 就算中间没有进行任何操作也会改变 全局变量不应该开始的时候就是0 不用初始化的吗 希望dl帮忙看看

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-03-23 15:05
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述: 对于下面这段代码,为什么输入之后数据会自己改了呢?就算中间没有进行任何操作也会改变。全局变量不应该开始的时候就是0,不用初始化的吗?希望dl帮忙看看。
    #include<bits/stdc++.h>
    using namespace std;
    int m,n,ans,sz[100010];
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            scanf("%d",&sz[i]);
            ans=max(ans,sz[i]);
            }
        int l=ans,r=ans+m;
        int cnt=0,k=0;
        for(int i=1;i<=n;i++){
            if(sz[i]>r){
                printf("-1");
                return 0;
                }
            else if(sz[i]>r-k){
                cnt++;
                k=sz[i];
                }
            if(cnt>m){
                printf("-1");
                return 0;
                }
            }
        printf("%d",ans);
        return 0;
        }
    

    问题分析: 根据代码,首先读入两个整数n和m,再循环读入n个数到数组sz中。在第一个循环中,作者计算ans=max(ans,sz[i]),即找到sz数组中的最大值,存储在ans中。接下来,根据ans和m计算出l和r两个变量,l等于ans,r等于ans加上m。在第二个循环中,作者判断sz[i]是否大于r或者大于r-k,如果是,则输出-1并结束程序。如果cnt大于m,则同样输出-1并结束程序。 根据以上分析,可以认为代码逻辑没有问题。但是问题可能出在输入上。根据问题描述中的截图可以看出,输入的数据格式不正确,可能导致程序读取到了错误的值,导致程序出错。因此,需要检查一下输入数据的格式是否正确。 解决方案: 建议调整代码,增加针对输入格式错误的处理,如下所示:

    #include<bits/stdc++.h>
    using namespace std;
    int m,n,ans,sz[100010];
    int main(){
        if(scanf("%d%d",&n,&m) != 2) {
            printf("Invalid input format!");
            return 1;
        }
        for(int i=1;i<=n;i++){
            if(scanf("%d",&sz[i]) != 1) {
                printf("Invalid input format!");
                return 1;
            }
            ans=max(ans,sz[i]);
        }
        int l=ans,r=ans+m;
        int cnt=0,k=0;
        for(int i=1;i<=n;i++){
            if(sz[i]>r){
                printf("-1");
                return 0;
            }
            else if(sz[i]>r-k){
                cnt++;
                k=sz[i];
            }
            if(cnt>m){
                printf("-1");
                return 0;
            }
        }
        printf("%d",ans);
        return 0;
    }
    

    上述代码中,增加了针对输入格式错误的处理。当scanf函数返回值不等于参数2时,即1对应读入一个值,2对应读入两个值,程序会输出"Invalid input format!"并返回1,表示程序异常结束。 参考资料: CSDN论坛:为什么输入之后数据会自己改了呢? C++中scanf函数用法总结

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月11日
  • 修改了问题 3月23日
  • 创建了问题 3月23日