2014-11-21 29 views
0

当我尝试扫描整数n并声明一个数组时,我无法得到我的正确输出,当我调试它并打印一个数组元素时,出现错误: 无法对不完整类型执行指针数学,尝试投射到已知类型,或void *如何扫描一个整数'n',然后在c中声明一个数组[1000] [n]?

#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; 
} 
+0

不是'所以char a [1000] [N];',建议'字符* a = malloc(1000 * n * sizeof * a);'as'char a [1000] [n];'可能对您的系统来说太大。 – chux 2014-11-21 07:17:11

+1

您会在哪一行发生错误?并请foprmat您的代码 – 2014-11-21 07:18:04

+0

您的程序在我的系统中正常工作,没有错误..你在哪里得到错误,你可以提及..? – 2014-11-21 07:24:45

回答

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; 
}