【问题标题】:Finding Horizontal pairs in a C multidimensional array在 C 多维数组中查找水平对
【发布时间】:2014-04-18 18:57:52
【问题描述】:

我一直在为我的程序苦苦挣扎。我正在尝试在 function1 中设置的数组中查找水平对。我的目标是在另一个函数中更改原始数组。然后处理该数组以找到水平对。

发生的一个问题是当我运行程序时,结果为零。另一个问题是函数1中的gcc警告,警告:指针和整数的比较。另一个问题是另一个 gcc 警告(由 ** 标记)警告:从不兼容的指针类型传递 'function1' 的参数 1。

感谢任何帮助,作为一个初学者,我在这个问题上花了几个小时并试图找到解决方案,但尝试使用指针并使用 structtypedef 没有工作。 :(

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void function1 (int letter1[][16]);
void function2 (int letter2[][16]);

int  main ( void )
{  

  int letter_array [13][16];

  printf("\n \t\t Hello!");
  printf("\n This program will create a random selection of 180 upper-case"
    " characters. \n");

  **function1(&letter_array);**

  function2(letter_array);

return ( 0 ) ;
}    


void function1 (int letter1 [][16])
{
  int i, z; 
  srandom((unsigned)time(NULL));

  for(i=0; i<=11; i++)
    {
       for(z=0; z<=14; z++)
       {
          letter1 [i][z] = random( )%26+65;
          printf("%c ", letter1 [i][z]);
       }
       printf("\n");
    }

  return ;
  }

void function2 (int letter2 [][16])
  {
  int a,b; 
  int m=0;
    for( a = 0; a <= 11; a++)
    {
       for( b = 0 ; b <= 14; b++)
       {
            if (letter2 == (letter2 + 1))
            m++;
       }
    }
  printf("\nThe number of horizontal pairs of characters"
    " are: %d", m);

  return ;

【问题讨论】:

    标签: c arrays multidimensional-array function-pointers


    【解决方案1】:

    只需从参数中删除与符号&amp;

    改变

    function1(&letter_array);
    

    function1(letter_array);
    

    编辑: 也改

    if (letter2 == (letter2 + 1))
    

    if (letter2[a][b] == (letter2[a][b+1]))
    

    【讨论】:

    • 使用 letter1[i][z] = random() % 26 + 'A'; 代替幻数 65 可能更好。
    • 会有什么不同?
    • 可读性表明代码试图做什么。这个神奇的数字并没有立即说明他为什么要添加这些数字以及它们代表什么。我什至会把它写成(char)(random() % 26 + 'A'),并附上一条评论说“从 A-Z 生成一个随机字母”
    • @Tawnos 我曾想过这样做,但我不确定其他人将使用哪个 shell 来编译程序。哈利的书说,有些贝壳看起来确实是从 A-Z 订购的,有些则从 Aa-xZ 订购。我使用的外壳,随机字母 A-Z 就可以了。
    • @skrtbhtngr 你是对的。我不知道为什么我不能把它放在一起,但我偷偷怀疑我的数组没有在 function1 中改变。所以,我的努力主要是在“修复” function1main() 之间的关系。
    【解决方案2】:

    出现警告是因为您将指向数组 [] [16] 的指针传递给 function1 而不是数组本身。这可以通过删除 & 来解决:

    function1(letter_array);
    

    由于 main 函数末尾的 return 语句,程序返回 0。

    【讨论】:

      猜你喜欢
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      相关资源
      最近更新 更多