2013-03-06 2 views
0

У меня есть этот маленький проект, который является машиной, движение которой в 2 измерениях, «ходьба» по 1 блоку во время. Поэтому я начинаю с программирования, и я хотел бы напечатать цифры в порядке, например, машина движется.Автоматическое перемещение 2D-машины с помощью C

Как это:

X O O O O

O O O O O

O O O O O

O O O O O

, то следующий шаг будет

O O O O O

XOOOO

OOOOO

OOOOO

затем идти до конца колонки, поэтому он перемещается в другую колонку и сделать задворки движения (или он может пойти на первые точки в новом столбец и повторить движение)

Что я делаю, это одна матрица и пытается создать цикл с ограничениями, но он не работает. Я тоже новичок в языке C.

Помните, что для программирования я просто хочу, чтобы напечатать каждое место, 1 на 1.

Другой вопрос: I'm думая о покупке доски развития, чтобы сделать это, что вы думаете об этом? =) должен ли я разработать драйвер с использованием linux?

спасибо.

EDIT: вот мой код, аварии, и СРЮ для новичка вопрос = S

#include <stdio.h> 
#include <iostream.h> 

int main() 
{ 
    int num[625]; 
    int x,y,count; 
    do 
    { 
    printf("\n Inicializando... "); 
    num[625]=num[count]; 
    count++; 
    } 
    while (num[count]!= 25); 
    if (num[count]=25) 
    { 
     do 
     { 
     printf("\n Inicializando... "); 
     num[625]=num[count]; 
     count++; 
     } while (num[count]!= 25); 

    } 
    for (count=0;count<625;count++) 
    printf (" %d",num[count]); 

    system("pause"); 
    return(0); 
} 
+2

Я думаю, что немного раньше говорить о драйверах Linux, если вы новичок программист C. Для написания драйверов для Linux требуется большой опыт. Это помогло бы нам, многие из вас отправили код, с которым у вас возникли проблемы, и объяснили немного больше о том, что «он не работает» –

+0

@MatsPetersson Я редактировал, теперь с моим кодом =) –

+0

Не могли бы вы также добавить часть о " он не работает »- что он делает, и чем он отличается от того, что вы на самом деле хотите сделать? –

ответ

1

Попробуйте этот алго.

Изменить NR По желанию Это число строк или столбцов.

#include<stdio.h> 

#define NR 5 

int main() 
{ 
    int i,j,loop; 
    for(loop=0; loop < NR*NR; loop++) 
    { 
     printf("Loop %d\n",loop); 
     for(i=0;i< NR; i++) 
     { 
     for (j=0;j<NR;j++) 
     { 
      if (loop == NR*j+i) printf("X "); 
      else     printf("0 "); 
     } 
     printf("\n"); 
     } 
     printf("\n"); 
    } 
} 
1

Это, вероятно, не фактический ответ на ваш вопрос, но:

int num[625]; 
... 
    num[625]=num[count]; 
... 

хранит что-то в позиции массива, которая фактически не существует. И C - довольно разрешительный язык, вы просто пишете что-то еще сразу после массива - возможно, x. Это скорее всего НЕ то, что вы хотели сделать.

Некоторые дополнительные замечания по коду здесь:

#include <stdio.h> 
#include <iostream.h> 

Это далеко от хорошо перемешать stdio.h с iostream (iostream.h очень OLD - если вы используете компилятор, который соответствует стандартам, а затем использовать iostream - однако , так как вы также помечены это как C, а не C++, я хотел бы предложить удалить его полностью.

int main() 
{ 
    int num[625]; 
    int x,y,count; 
    do 
    { 
    printf("\n Inicializando... "); 
    num[625]=num[count]; 

Обратите внимание, что в стороне от моего комментария выше об обращениях за пределами массива, num[count] никогда не был установлен - у него есть какое бы то ни было значение в этой памяти - это, возможно, практически любое значение в целочисленном диапазоне.

count++; 
    } 
    while (num[count]!= 25); 

Поскольку num[count] не инициализирован, он может или не может никогда быть 25. После того, как count получает достаточно высоко, то, вероятно, аварии.

if (num[count]=25) 
    { 
     do 
     { 
     printf("\n Inicializando... "); 
     num[625]=num[count]; 
     count++; 
     } while (num[count]!= 25); 

    } 
    for (count=0;count<625;count++) 
    printf (" %d",num[count]); 

Я никогда не был большим поклонником более двух, может быть, трех последовательных пустых линий в функции.

system("pause"); 
    return(0); 
} 
+0

Не говоря уже о том, что 'if (num [count] = 25)' на самом деле устанавливает 'num [count]' на 25. Таким образом, цикл будет всегда повторяться дважды? – Bingo

+0

@Bingo: Хорошее место. Тем не менее, я действительно считаю, что он падает до этого момента ... –