2014-11-12 5 views
0

iI'm пытается понять, как правильно использовать массивы на C и попытался написать простую программу, которая должна взять массив из 5 целых чисел и исключить нули влево. Это моя попытка:Проблемы при работе с массивом в C

#include <stdio.h> 

int main() { 
    int seq[5]; 
    int i; 
    int cor[5]; 
    int counter; 
    printf("Type the 5 numbers: "); 
    scanf("%s", &seq); 
    for (i=0; i<5; i++){ 

     if (seq[i] != 0) { 
      for (counter=0; counter<5-i; counter++){ 
       cor[counter]=seq[i+counter]; 
      } 
      break; 
     } 
    } 
    printf("%s", cor); 
    return 0; 
} 

Идея заключалась в том, что, когда было введено нечто такое, как 00101, программа будет смотреть на каждую запись и проверьте, является ли это 0. Если это не так, в положении I, он будет писать новый массив, в котором 0-й позиции присваивается значение исходного массива в i, 1-й позиции присваивается значение в i + 1 и т. д., а затем он будет печатать этот новый массив, который не должен иметь ненужных нулей слева. Но он просто печатает исходный массив. Что не так? Извините за вопрос нищенства.

+2

Это было бы лучше спросил на SO, я думаю. Но учтите, что вы не можете читать строку (% s) в целочисленный массив. Содержимое строки не преобразуется автоматически в целые числа. –

+1

Ваша внутренняя петля начинается с counter = 0 снова, также вы используете j, который не должен определяться. счетчик должен начинаться с текущего значения i. Скажем, в вашем примере первый 1 находится в позиции 2, поэтому вы хотите начать копирование оттуда. –

+0

Спасибо, Торстен, но, похоже, это не решает проблему. И я был бы еще более смущен, если бы это произошло, не нужно «встречать» начало в 0, чтобы оно записалось в 0-й записи «cor»? И извините за j, я был уверен, что исправил это, прежде чем вставлять его здесь ... –

ответ

1

У вас есть два способа сделать то, что вы хотите.

  1. , используя символы:

    #include <stdio.h> 
    
    int main() { 
        char seq[6]; /* reserve one place for terminating null */ 
        int i; 
        char cor[5]; 
        int counter; 
        printf("Type the 5 digits : "); 
        scanf("%5s", seq); /* limit to 5 chars and seq is already an array : ne & */ 
        for (i=0; i<5; i++){ 
         /* should control seq[i] >= '0' && seq[i] <= '9' */ 
         if (seq[i] != '0') { 
          for (counter=0; counter<6-i; counter++){ /* also copy terminating null */ 
           cor[counter]=seq[i+counter]; 
          } 
          break; 
         } 
        } 
        printf("%s", cor); 
        return 0; 
    } 
    

    , но пользователь может дать вам символы, которые не являются цифры.

  2. с использованием Интс:

    #include <stdio.h> 
    
    int main() { 
        int seq[5]; 
        int i; 
        int cor[5]; 
        int counter; 
        printf("Type the 5 numbers: "); 
        i = scanf("%d%d%d%d%d", seq, seq+1, seq+2, seq+3, seq+4); /* seq+i = &(seq[i]) */ 
        /* should control i == 5 */ 
        for (i=0; i<5; i++){ 
    
         if (seq[i] != 0) { 
          for (counter=0; counter<5-i; counter++){ 
           cor[counter]=seq[i+counter]; 
          } 
          break; 
         } 
        } 
        printf("%d%d%d%d%d", cor[0], cor[1], cor[2], cor[3], cor[4]); 
        return 0; 
    } 
    
1

Вы не можете сохранить строку в целочисленном массиве. Вы должны хранить строки в массивах символов.

+3

Чтобы разработать: seq - массив из int. Но параметр% s для scanf сообщает ему, что вы хотите строку, а строка - это массив символов. –

Смежные вопросы