2013-09-13 3 views
1

Я пытаюсь создать сетку символов, и для этого примера я использую сетку 3by 3. Я использую два для циклов для назначения из отдельного одномерного массива символов, но конечное значение в каждой строке всегда равно первому значению следующего, но не может понять, почему. Что-то не так с моим вычислением строки и col?Назначение двумерного массива с использованием цикла for

char text[8] = "abcdefghi"; 
char grid[2][2]; 

int i,j; 
for(i=0; i<=8; i++) 
{ 
    char c = text[i]; 
    int row = i/3; 
    int col = i%3; 
    printf("%c row=%d col=%d i=%d\n", c, row, col, i); 
    grid[row][col] = c; 
} 

printf("------\n"); 

for(i=0; i<3; i++) 
{ 
    for(j=0; j<3; j++) 
    { 
     printf("%c row=%d col=%d \n", grid[i][j], i, j); 
    } 
} 
+0

То не массив 3x3. И включите предупреждения компилятора. Сколько символов, включая терминатор, находится в «abcdefghi»? – WhozCraig

ответ

2

изменить эти два заявления

char text[8] = "abcdefghi"; //you require size of 10 
//9 bytes to store 9 characters and extra one is to store null character 

char grid[2][2]; here you need to declare 3 by 3  
// array[2][2] can able to store four characters only 
// array[3][3] can store 9 characters 

Как это

char text[10] = "abcdefghi"; //you require size of 10 
char grid[3][3]; here you need to declare 3 by 3 
+0

Я идиот и слишком долго не делал С. Спасибо! –

+0

@BenElgar Не беспокойтесь, это распространенные ошибки, сделанные на стадии нищенства. с ошибками, которые вы не можете узнать ... поднять настроение. – Gangadhar

+0

Еще лучше, сделайте 'char text [] =" abcdefghi ";' и избавь себя от проблемы с расчетом :) –

2

У вас ошибка в первой строке

char text[8] = "abcdefghi"; 

Вы объявляете массив размером 8, но вы хотите инициализировать его с помощью 10 символов актеры. Выполните одно или это так:

char text[10] = "abcdefghi"; 

char text[] = "abcdefghi"; 

Аналогичная ошибка с char grid[2][2];, где у вас есть 2 по 2 сетки вместо 3 на 3.

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