如何扫描整数'n'然后在c中声明一个数组[1000] [n]?

时间:2014-11-21 07:13:12

标签: c arrays pointers

当我尝试扫描整数n并声明一个数组时,我无法得到正确的输出,当我调试它并打印数组的元素时,我收到一个错误: 无法对不完整类型执行指针数学运算,尝试转换为已知类型或void *

#include <stdio.h>
int main()
{
    int n,i=0,j=0,k=0;
    scanf("%d",&n);
    char string[10000];
    scanf("%s",string);
    char a[1000][n];

    while(isalnum(string[i])!=0)
    {
        for(j=0;j<n;j++)
        {
            a[k][j]=string[i];
            i++;
        }
        k++;
    }

    i=0;
    for(j=0;j<n;j++)
    {
        while(isalnum(a[i][j])!=0)
        {
            printf("%c",a[i][j]);
            i++;
        }
    }
    printf("\n");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

while(isalnum(string[i])!=0)
    {
      for(j=0;j<n;j++)
      {
        a[k][j]=string[i];
        i++;
      }
      k++;
    }

在这个循环中有一个错误,while条件正在检查isalnum(string[i] != 0),而在while循环中你有一个for循环,其中i正在递增。 仅仅因为你没有得到正确的输出,你似乎认为数组创建导致了问题。但阵列创建很好。实现你想要做的事情是你的逻辑错误。

如果您只想打印字母数字字符而忽略其余字符,则可以如下所示:

#include <stdio.h>
int main()
{
   int i=0,k=0;
   char s[10000];
   char a[10000];
   scanf("%s",s);

   while(s[i] != '\0')
   {   
      if(!isalnum(s[i]))
      {   
         i++;
         continue;
      }   
      else
         a[k++] = s[i];
      i++;
   }   
   a[k] = '\0';
   printf("%s\n",a);
   return 0;
}