【问题标题】:Inputting integer values into an Array in C将整数值输入到 C 中的数组中
【发布时间】:2013-12-28 05:13:44
【问题描述】:

我试图找出数组。我在使用单维数组和多维数组时遇到同样的问题,当我输入值并尝试稍后在代码中返回值时,它会返回错误的数字。

#include <stdio.h>

main ()
{
    int arrayPrimary[2][2];
    int x,y,a,b;

    for(x=0; x<2; x++)
    {
        for (y=0; y<2; y++)
        {
            int* z;
            *z==arrayPrimary[x][y];
            printf("please enter a value for [%d][%d]:",x,y);
            scanf("%d", &z);    
        }
    }

    for(a=0; a<2; a++)
    {
        for(b=0; b<2;b++)
        {
            printf ("The current value of [%d][%d] is:%d\n",a,b,arrayPrimary[a][b]);
        }

    }

    return 0;
}

【问题讨论】:

  • *z==arrayPrimary[x][y]; 这应该是一项任务吗? == 不是赋值运算符。

标签: c arrays integer


【解决方案1】:

这部分代码

  int* z;
    *z==arrayPrimary[x][y];
    printf("please enter a value for [%d][%d]:",x,y);
    scanf("%d", &z);

应该阅读

    printf("please enter a value for [%d][%d]:",x,y);
    scanf("%d", &arrayPrimary[x][y]);

你还应该考虑检查scanf的返回值

【讨论】:

    【解决方案2】:

    这里有几个问题。

    首先,您使用==(比较),而您的本意是使用=(赋值)(考虑到人们经常犯这个错误,这是相当讽刺的)。这意味着*z 永远不会被初始化。就此而言,z 本身从未初始化,因此您正在访问垃圾内存。

    当您尝试将整数 ("%d") 写入指针 (z) 时,可能会发生错误。请记住,scanf 带有一个指向您希望将输入写入的位置的指针,因此如果您的输入是 int,您需要将指针传递给 int。您将一个指向指针的指针传递给int

    这里的指针逻辑可能是你最困惑的地方,让我们详细介绍一下:

    • arrayPrimary[x][y] 是一个整数,它在内存中具有与任何普通变量一样的地址。
    • scanf 需要知道这个位置才能将值写入您的数组。
    • 您似乎正在尝试使用另一个变量z 作为scanf 的参数。但是,即使您将 arrayPrimary[x][y] 的值复制到 z 指向的地址,z 仍然是与您的数组不同的变量。
    • z (&amp;z) 的内存地址与您的数组没有任何关系。当您将&amp;z 传递给scanf 时,scanf 将查看此地址并将输入写入其中。因此,您将输入定向到 z,而不是您的数组。

    试试这个:

    for (y=0; y<2; y++)
    {
        int *z = &arrayPrimary[x][y];
        printf("please enter a value for [%d][%d]:",x,y);
        scanf("%d", z);
    
    }
    

    这样,它是这样的:

    • 您创建一个指针z,它指向您要更改的数据(即arrayPrimary[x][y])。
    • 您将这些数据传递给scanf,它将输入写入z 指向的位置——即arrayPrimary[x][y]

    但是,不需要单独的指针。你可以写:

    for (y=0; y<2; y++)
    {
        printf("please enter a value for [%d][%d]:",x,y);
        scanf("%d", &arrayPrimary[x][y]);
    }
    

    【讨论】:

      【解决方案3】:

      如果 z 已经是一个指向你想要的内存位置的指针,那么在你的 scanf 中使用 &amp;z 是没有意义的;只需使用z

      (编辑:假设您按照 cmets 中的说明将 = 理顺。)

      【讨论】:

        【解决方案4】:

        用你的线:

        int *z;
        

        您只需设置一个指向int 的指针。在你的下一行:

        *z==arrayPrimary[x][y];
        

        您首先取消引用该指针 (*z),所以您说“我现在想使用该值,指针指向”。接下来,将该值与arrayPrimary[x][y] 进行比较,并丢弃该比较的结果。在这里,您应该得到编译器的警告,例如“语句无效”之类的警告。所以这条线实际上什么也没做。 试试:

        int *z = &arrayPrimary[x][y];
        

        我说的不是这两行,而是最后几行。

        【讨论】:

          【解决方案5】:
          #include<stdio.h>
          #include<iostream>
          int main ()
          {
              int arrayPrimary[2][2];
              for(int i=0; i<2; i++)
              {
                  for (int j=0; j<2; j++)
                  {
                      printf("Please Enter value for %d%d",i,j);
                      scanf("%d",&arrayPrimary[i][j]);
                  }
              }
              for(int i=0; i<2; i++){
                  for(int j=0; j<2;j++){
                      printf("%d",arrayPrimary[i][j]);
                      printf(" ");
                  }
                  printf("\n");
              }
              return 0;
          }
          

          【讨论】:

            猜你喜欢
            • 2021-12-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-06
            • 2019-04-15
            • 2019-02-27
            相关资源
            最近更新 更多