囫囵觉w 2023-01-05 19:16 采纳率: 84.6%
浏览 25
已结题

关于#数组#的问题,如何解决?

定义了一个数组A[100],未赋初值,在函数中调用数组A,并多次使用该函数,发现A被覆盖(由于第一次使用给A 赋值的长度大于第二次,所以第二次赋值结果错误),但在主函数中直接使用A,并赋值,无误

错误代码:

#include<stdio.h>
#include<string.h>
void swap(char a[],char A[]){
    int len=strlen(a);
    int j=0;
    for(int i=0;i<len;i++){
        if(a[i]>='0'&&a[i]<='9'){ 
            A[j]=a[i];
            j++;
        }
        A[j]='\0';
    }
}
int main(void){
    char a[100],b[100]
    while(scanf("%s%s",a,b)!=EOF){
    char A[100],B[100];
    int n1,n2;
    swap(a,A);
    swap(b,B);
    sscanf(A,"%d",&n1);
    sscanf(B,"%d",&n2);
    if(a[0]=='-'){
        n1=-n1;
    }
    if(b[0]=='-'){
        n2=-n2;
    }
    printf("%d",n1+n2);
    }
    return 0;
} 









###### 正确代码

```c++
#include<stdio.h>
#include<string.h>

int main() {
    char a[20], b[20], A[20], B[20];
    int n1, n2;
    while (scanf("%s %s", a, b) != EOF) {
        int a_len = strlen(a);
        int j = 0;
        for (int i = 0; i < a_len; i++) {
            if (a[i] >= '0' && a[i] <= '9') {
                A[j] = a[i];
                j++;
            }
        }
        A[j] = '\0';
        sscanf(A, "%d", &n1);
        if (a[0] == '-') { n1 = -n1; }
        int b_len = strlen(b);
        int k = 0;
        for (int i = 0; i < b_len; i++) {
            if (b[i] >= '0' && b[i] <= '9') {
                B[k] = b[i];
                k++;
            }
        }
        B[k] = '\0';
        sscanf(B, "%d", &n2);
        if (b[0] == '-') { n2 = -n2; };
        printf("%d\n", n1 + n2);
    }
    return 0;
}


######想知道为什么第二种可行,数组值不会改变吗

  • 写回答

3条回答 默认 最新

  • ShowMeAI 2023-01-05 19:35
    关注

    第二种代码是正确的,因为它在函数内部声明了局部变量A和B,这两个变量的作用域只在函数内部。因此,每次调用函数时,A和B的值都会重新被赋值,而不会影响主函数中的A和B。


    在第一种代码中,你将A和B作为函数的参数传入,这意味着它们是引用传递。在函数内部,你对A和B进行了赋值操作,这将会改变它们的值。因此,当你在调用函数时,A和B的值可能会被改变,这可能会导致程序出现错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月13日
  • 已采纳回答 1月5日
  • 修改了问题 1月5日
  • 修改了问题 1月5日
  • 展开全部

悬赏问题

  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等