2016-01-17 3 views
1

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

Я получаю правильный вывод с текущим кодом, но я не могу понять, как назначить вход в массив, не получая ошибок в выходе.

#include <stdio.h> 

int main(void) 
{ 
    int disp[2][5]; 

    int x, y; 
    printf("Please enter 5 integer values:\n"); 

    for(x=0; x<=2; x++) { 

     for (y=0; y<=5; y++) { 
      scanf("%d", &x); 
      printf("[ %d ][ %d ]\n", x, x*x); 
     } 
    } 

    return 0; 
} 
+3

Вы используете 'x' в качестве переменной цикла, и как входной переменной. Плохо. Кроме того, когда массив имеет 5 элементов, индексы в массиве составляют 0,1,2,3,4. Таким образом, цикл 'for' должен быть' for (y = 0; y <5; y ++) '. – user3386109

+1

Используйте одну переменную в цикле, а другую - для чтения. Затем просто 'disp [x] [y] = read_variable'; –

+0

Думаю, у вас должно быть три петли. Первый цикл считывает пять чисел от пользователя и сохраняет их в первой строке массива. Второй цикл вычисляет квадрат каждого числа и сохраняет его во второй строке массива. Третий цикл отображает числа и их квадраты. – user3386109

ответ

0

Если вы намерены заполнить этот массив disp[2][5]; вы можете ввести 2 * 5 = 10 целых чисел. Я предполагаю, что это то, что вы намереваетесь. Обратите внимание, что вам необходимо изменить условия цикла, чтобы избежать переполнения индекса массивом.

Вы должны изменить следующим образом:

printf("Please enter 10 integer values:\n"); 
for(x=0; x<2; x++) 
    { 
     for (y=0; y<5; y++){ 
      scanf("%d", &disp[x][y]); 
      printf("[ %d ][ %d ]\n", disp[x][y], disp[x][y]*disp[x][y]); 
     } 

    } 
2

Следующий код просматривает пять номеров, и сохраняет квадраты в массиве (который никогда больше не используются):

#include <stdio.h> 

#define NUM_ITEMS 5 // store the number of items in one place 

int main() 
{ 
    int disp[2][NUM_ITEMS]; 
    int i; 

    printf("Please enter %d integer values:\n", NUM_ITEMS); 

    for (i = 0; i < NUM_ITEMS; ++i) { 

     if (scanf("%d", &disp[0][i]) == 1) { 
      // always check the return value of scanf() 

      disp[1][i] = disp[0][i] * disp[0][i]; // store squares in array 
      printf("[ %d ][ %d ]\n", disp[0][i], disp[1][i]); 
     } 
     else { 
      printf("Error in scanf()\n"); 
      break; 
     } 
    } 

    return 0; 
} 

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

Некоторые проблемы с вашим кодом:

for(x=0; x<=2; x++) { // overflows array (0, 1 and 2) 
         // should be x < 2 
    for (y=0; y<=5; y++){ // idem -> y < 5 
     scanf("%d", &x); // scanf() is called 10 times 
        // x is already used as a loop counter! 
     printf("[ %d ][ %d ]\n", x, x*x); 
      // squares are never stored in the array 
    } 
} 
Смежные вопросы