Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Обработка scanf в двумерном массиве


Автор: n199a 24.5.2013, 20:57
Почему в функции scanf в ковычках записано только один раз "%d"? Я это к тому, что, как определить, куда занесется введенное мной число, в i или в j?
Код

#include <stdio.h>
const int M = 5;                     // число строк
const int N = 4;                     // число столбцов
main()
{
int i, j, A[M][N];
for ( i = 0; i < M; i ++ )           // цикл по строкам
for ( j = 0; j < N; j ++ )          // цикл по столбцам строки
{
printf ("A[%d][%d]=", i, j);    // подсказка для ввода
scanf ("%d", & A[i][j]);          // ввод A[i][j]
}

}

Автор: Фантом 24.5.2013, 21:30
Цитата(n199a @  24.5.2013,  21:57 Найти цитируемый пост)
Почему в функции scanf в ковычках записано только один раз "%d"? Я это к тому, что, как определить, куда занесется введенное мной число, в i или в j?

Замечательно.  smile А почему Вас не интересует, не занесется ли введенное число в A или, упаси боже, вообще в & ?

Автор: n199a 24.5.2013, 22:08
Цитата(Фантом @  24.5.2013,  21:30 Найти цитируемый пост)
Замечательно.   А почему Вас не интересует, не занесется ли введенное число в A или, упаси боже, вообще в & ? 


Код

scanf ("%d", & A[i][j]);


Что к чему, в & ?!
Вообще в массив А и заносится, только в столбец или строку.

Давайте лучше без приколов, а по существу.

От второго for зависит?
Код

for ( j = 0; j < N; j ++ )

Автор: Фантом 24.5.2013, 22:41
Цитата(n199a @  24.5.2013,  23:08 Найти цитируемый пост)

Давайте лучше без приколов, а по существу.

Ну что ж, давайте. Откройте любой учебник по C/C++ и посмотрите форму обращения к элементу массива. Раздел, конечно, называется "для новичков", но все же даже новичок настолько элементарные вещи должен знать.

Цитата(n199a @  24.5.2013,  23:08 Найти цитируемый пост)

От второго for зависит?

Аналогично. Пересказывать тут синтаксис языка "с нуля" явно не стоит.

Автор: feodorv 25.5.2013, 03:01
Цитата(n199a @  24.5.2013,  21:57 Найти цитируемый пост)
только один раз "%d"

Вводится одно значение, соответственно, один "%d".


Цитата(n199a @  24.5.2013,  23:08 Найти цитируемый пост)
От второго for зависит?

Тут, правда, не возможно без приколов (((
А от первого? Зависит что?


Цитата(n199a @  24.5.2013,  21:57 Найти цитируемый пост)
for ( i = 0; i < M; i ++ )           // цикл по строкам
for ( j = 0; j < N; j ++ )          // цикл по столбцам строки

Здесь происходит обход всех элементов матрицы в двойном цикле. Первый цикл - обход по строкам, второй - обход по столбцам конкретной строки (см. первый цикл).
Уберите scanf из цикла, посмотрите, что будет.


Цитата(n199a @  24.5.2013,  21:57 Найти цитируемый пост)
куда занесется введенное мной число, в i или в j

Почитайте про http://www.chitay.org/c/08/0805.htm. Какие у него спецификаторы, какие соответствующие аргументы.
Почитайте про массивы в C. Что означает A[i][j], что означает &A[i][i]. И почему таки scanf ("%d", &A[i][j]) заносит введенное значение в ячейку матрицы A[i][j], как и написано в комментарии к этой строке (а значения переменных i и j как раз заданы и меняются с каждым шагом (двойного) цикла). Зачем там &. Как вывести значение ячейки матрицы на экран. Почему в printf'е уже не пишется &. И так далее. И тому подобное.


Цитата(n199a @  24.5.2013,  21:57 Найти цитируемый пост)
в i или в j

Если бы значение заносилось в i, то scanf имел бы вид:
Код
scanf ("%d", &i);
Если бы в j, то:
Код
scanf ("%d", &j);
Если бы и туда, и туда, то:
Код
scanf ("%d %d", &i, &j);

Автор: kolesnle 2.6.2013, 19:29
Цитата(n199a @  24.5.2013,  22:08 Найти цитируемый пост)
&

оператор взятия адреса

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)