从函数中的2D char数组中正确读取

时间:2015-08-11 11:05:34

标签: c arrays string

我无法读取char数组 这是我将每个测试用例的字符串传递给我的数组的方法,并且工作正常,但传递数组是个问题。我在这里查了一下:
Passing arrays and matrices to functions as pointers and pointers to pointers in C
我仍然收到警告,我在指针和整数之间进行比较。

  char klammern[MAX][STRING];
    int i, test;
    int ergebnis;

    printf(" Test cases?:");
    scanf("%d",&test);
    getchar();                      //catch Enter


    for(i=0;i<test;i++)
    {
        fgets(klammern[i],30,stdin);
    }

以下是我传递参数的方法:

    for(i=0;i<test;i++)
    {
      ergebnis = matching_brackets( klammern );
      printf("%d ",ergebnis);
    }

我的函数应该计算括号的数量,如果不是所有括号都关闭则返回1,如果一切都正确,则返回0。

int matching_brackets(char (*klammern)[STRING])
{
    int ergebnis, i;
    int runde_klammern = 0;

    for(i=0; *klammern[i] != '\n';i++)
       {
           if( *klammern[i] == '(')
            {
            runde_klammern++;
            }

            else if( *klammern[i] == ')')
            {
            runde_klammern--;
            }
   ergebnis = runde_klammern;

   if ( ergebnis != 0)
   {
       return 1;
   }
   else
   {
       return 0 ;
   }

测试时我看到函数中的for循环读取了我的数组:
数组[1] [0]
数组[2] [0]
... 我想循环数组,如:
阵列[0] [0]
阵列[0] [1]
...

编辑:我修复了函数中的拼写错误后,我不再收到编译器警告。

1 个答案:

答案 0 :(得分:2)

你有两个问题,一个是你的循环错误而另一个是operator precedence问题。

你应该循环,例如。

for (size_t i = 0; i < test; ++i)
{
    for (size_t j = 0; klamern[i][j] != '\n'; ++j)
    {
        // Here `klamern[i][j]` is the current character
    }
}

请注意,您还需要将test变量传递给函数。

上述循环也消除了第二个问题。 (编译器将*klamern[i]视为*(klamern[i])而不是(*klamern)[i])。