2014-11-21 1 views
0

Когда я пытаюсь сканировать целое число n и объявляю массив, я не могу получить свой правильный вывод, и когда я его отлаживаю и печатаю элемент массива, я получаю сообщение об ошибке: Не удается выполнить математику указателя на неполных типах, попробуйте выполнить кастинг к известному типу, или void *.Как сканировать целое число 'n', а затем объявлять массив [1000] [n] в c?

#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

Вместо 'обугливается а [1000] [п];', предложить 'символ * a = malloc (1000 * n * sizeof * a); 'как' char a [1000] [n]; 'вероятно, слишком велико для вашей системы. – chux

+1

На какой строке вы видите ошибку? И, пожалуйста, foprmat ваш код –

+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) и внутри цикла в то время как у вас есть цикл, где я в настоящее время увеличивается на единицу. Просто потому, что вы не получаете правильного вывода, вы, похоже, предполагаете, что создание массива вызывает проблему. Но создание массива в порядке. Ваша логика - добиться того, что вы пытаетесь сделать, неправильно.

Если вы просто хотите, чтобы напечатать алфавитно-цифровых символов и игнорировать остальные из них можно сделать, как показано ниже:

#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; 
} 
Смежные вопросы