Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C无法存储到数组中 printf(“\n\t有许多整数:”); scanf(“%d”和&num); iPtr=(int*)malloc(num*sizeof(int)); 对于(i=0;i这是一个赋值运算符。i、 e您正在将y的值赋给x。这将始终将y分配给x,并执行其中的语句_C_Arrays - Fatal编程技术网

C无法存储到数组中 printf(“\n\t有许多整数:”); scanf(“%d”和&num); iPtr=(int*)malloc(num*sizeof(int)); 对于(i=0;i这是一个赋值运算符。i、 e您正在将y的值赋给x。这将始终将y分配给x,并执行其中的语句

C无法存储到数组中 printf(“\n\t有许多整数:”); scanf(“%d”和&num); iPtr=(int*)malloc(num*sizeof(int)); 对于(i=0;i这是一个赋值运算符。i、 e您正在将y的值赋给x。这将始终将y分配给x,并执行其中的语句,c,arrays,C,Arrays,我正在编写一个程序来存储整数中出现的数字,但当我运行该程序时,我发现数组不工作 所以我想问为什么不允许我存储整数中的数字? 如何修复它 还有一个问题,if(x=y)和if(x=y)之间有什么不同 printf("\n\tHow many integers: "); scanf("%d", &num); iPtr = (int*) malloc(num * sizeof(int)); for(i = 0; i < num; i++) { p

我正在编写一个程序来存储整数中出现的数字,但当我运行该程序时,我发现数组不工作

所以我想问为什么不允许我存储整数中的数字? 如何修复它

还有一个问题,if(x=y)和if(x=y)之间有什么不同

printf("\n\tHow many integers: ");
    scanf("%d", &num);

    iPtr = (int*) malloc(num * sizeof(int));

    for(i = 0; i < num; i++) {
        printf("Enter integer # %d ", i + 1);
        scanf("%d", (iPtr + i));

        temp = *(iPtr + i);
        while(temp != 0) {

            if(i == temp % 10) {
                ary[i]++;
            }
            temp /= 10;
        }
    }

    for(i = 0; i < 10; i++) {
        if(ary[i] > 0) {
            printf("digit %d : %d\n", i, ary[i]);
        }
    }
由于,==在%之前计算。通过用括号括住%进行修复:

if(i == temp % 10)

另外,要回答您的其他问题以及一些吹毛求疵的问题(事先道歉):

  • =是赋值,==是相等性测试
  • 根据您所说的,您的内部while循环可能误用了i
    • 您的问题在于这一行:

      printf("\n\tHow many integers: ");
          scanf("%d", &num);
      
          iPtr = (int*) malloc(num * sizeof(int));
      
          for(i = 0; i < num; i++) {
              printf("Enter integer # %d ", i + 1);
              scanf("%d", (iPtr + i));
      
              temp = *(iPtr + i);
              while(temp != 0) {
      
                  if(i == temp % 10) {
                      ary[i]++;
                  }
                  temp /= 10;
              }
          }
      
          for(i = 0; i < 10; i++) {
              if(ary[i] > 0) {
                  printf("digit %d : %d\n", i, ary[i]);
              }
          }
      
      由于,==在%之前计算。通过用括号括住%进行修复:

      if(i == temp % 10)
      

      另外,要回答您的其他问题以及一些吹毛求疵的问题(事先道歉):

      • =是赋值,==是相等性测试
      • 根据您所说的,您的内部while循环可能误用了i
      如果(x=y)->这是一个赋值运算符。i、 e您正在将y的值赋给x。这将始终将y分配给x,并执行其中的语句

      如果(x==y)->这是一个比较运算符。这里比较的是x的值是否等于y。如果为true,它将执行{}内的语句,否则不会执行。

      如果(x=y)->这是赋值运算符。i、 e您正在将y的值赋给x。这将始终将y分配给x,并执行其中的语句


      如果(x==y)->这是一个比较运算符。这里比较的是x的值是否等于y。如果为true,它将在{}内执行语句,否则不会执行。

      以下循环需要重新考虑

      if(i == (temp % 10))
      
      我不知道你在这里尝试什么

      首先考虑
      if(i==temp%10)

      你在这里做的事情太多了。这里我将与10模温度进行比较,如果它们相等,则继续将它们存储到数组中

      假设您刚刚开始执行这个循环。所以i=0。假设您输入的第一个数字是1023。所以

      while(temp != 0) {
      
                  if(i == temp % 10) {
                      ary[i]++;
                  }
                  temp /= 10;
              }
      
      现在1023%10会给你3

      因此,如果(0==3),if循环将变成
      if
      //这是一个等式检查。0是否等于3


      显然,这将是错误的,因此内部数组循环永远不会执行

      以下循环需要重新考虑

      if(i == (temp % 10))
      
      我不知道你在这里尝试什么

      首先考虑
      if(i==temp%10)

      你在这里做的事情太多了。这里我将与10模温度进行比较,如果它们相等,则继续将它们存储到数组中

      假设您刚刚开始执行这个循环。所以i=0。假设您输入的第一个数字是1023。所以

      while(temp != 0) {
      
                  if(i == temp % 10) {
                      ary[i]++;
                  }
                  temp /= 10;
              }
      
      现在1023%10会给你3

      因此,如果(0==3),if循环将变成
      if
      //这是一个等式检查。0是否等于3


      显然,这将是错误的,因此内部数组循环永远不会执行

      好的,您几乎已经做对了,但我认为最大的问题是您的数组中有垃圾(声明时)

      for(int zz=0;zz<10;zz++)
      {
      如果((zz)=温度%10)
      {
      ary[zz]++;
      }
      }
      
      现在程序计算所有数字。 输出:


      这都是假设我理解你的程序是正确的。通常我不喜欢直截了当的发帖代码,但我真的不知道怎样才能让别人明白这一点。疲倦的自动取款机/

      好的,您几乎已经做对了,但我认为最大的问题是您的数组中有垃圾(声明时)

      for(int zz=0;zz<10;zz++)
      {
      如果((zz)=温度%10)
      {
      ary[zz]++;
      }
      }
      
      现在程序计算所有数字。 输出:


      这都是假设我理解你的程序是正确的。通常我不喜欢直截了当的发帖代码,但我真的不知道怎样才能让别人明白这一点。疲倦的自动取款机/

      这不是C#,这是C。请只问一个问题,并澄清什么是“不起作用”。你期待什么?你观察到了什么?这不是C#,而是C。请只问一个问题,并澄清什么“不起作用”。你期待什么?您观察到了什么?我尝试了if(I==(temp%10)),但它仍然不允许我存储,最后的循环将打印所有有值的ary元素,但没有打印任何内容除非我读错了,否则运算符优先级链接将模数[%]列在[==]上方。我刚刚测试了这个特殊的比较,结果和预期的一样。你的建议似乎不正确。@Alex你是对的;我想真正的错误可能是我用错了。@CongXu这里指定的优先级不正确。内部温度=4;如果(1==温度%3)printf(“真”);如果(1==(温度%3))printf(“真”);都将返回true。我尝试了if(I==(temp%10)),但它仍然不允许我存储,最后的循环将打印所有有值的ary元素,但没有打印任何内容除非我读错了,否则您的操作