LINUX.ORG.RU

Как сделать размерность матрицы вводом с клавиатуры

 , ,


0

1

Есть задание, помогите разобраться. Собственно, вопрос в том, как сделать мерность массива (тобиш размерность матрицы) вводом с клавиатуры? Остальное +- понял как прикрутить. https://ibb.co/qsRdX8Q

Ответ на: комментарий от BackDoorLover

Допиши сам 2 строки. errno тут не нужно, надо только проверять сколько объектов смог сканф распарсить, да и то не всегда это нужно делать.

Reset ★★★★★
()
Ответ на: комментарий от Stack77

Честно, поражаюсь местным сообществом (в очень хорошем смысле слова). Можно задать простяцкий вопрос, а получить ответ: как построить андронный коллайдер, причем со схемой и инструкцией :)

Обычно концовка «стандартная» …

anonymous
()
Ответ на: комментарий от Reset

Ну malloc() errno только в ENOMEM может выставить, там можно просто написать:

printf("malloc ne poluchilsya\n");

А в scanf() всё-таки лучше:

printf("NICHEGO NE RABOTAET!!!!111 %s\n", strerror(errno));
BackDoorLover
()
Ответ на: комментарий от anonymous

Быстрый набор и автозамена в смартфоне на базе ОС Андроид от Гугла. Чё тут не понятного. Давайте теперь ещё 3 страницы обсудим как правильно не косячить набирая текст с мобильного :D

Stack77
()
Ответ на: комментарий от BackDoorLover

Современная разработка живет в парадигме когда Malloc всегда что-то возвращает и эта проверка особо ничего не даст. Errno после scanf вреден у тебя будет Error Success на некорректном вводе что только будет запутывать.

Reset ★★★★★
()
Ответ на: комментарий от Reset
       The  value  EOF  is returned if the end of input is reached before either the first successful conversion or a matching failure occurs.
       EOF is also returned if a read error occurs, in which case the error indicator for the stream (see ferror(3)) is set, and errno is  set
       to indicate the error.

ERRORS
       EAGAIN The file descriptor underlying stream is marked nonblocking, and the read operation would block.

       EBADF  The file descriptor underlying stream is invalid, or not open for reading.

       EILSEQ Input byte sequence does not form a valid character.

       EINTR  The read operation was interrupted by a signal; see signal(7).

       EINVAL Not enough arguments; or format is NULL.

       ENOMEM Out of memory.

       ERANGE The result of an integer conversion would exceed the size that can be stored in the corresponding integer type.

Хммммм…

BackDoorLover
()
Ответ на: комментарий от BackDoorLover

Кто-то меня хочет обмануть и подсунул ман от какой-то низкоуровневой функции. Из всего этого scanf может вернуть только EOF.

RETURN VALUES
     These functions return the number of input items assigned.  This can be fewer than provided for, or even zero, in the event of a matching failure.  Zero indicates that,
     although there was input available, no conversions were assigned; typically this is due to an invalid input character, such as an alphabetic character for a `%d' conver-
     sion.  The value EOF is returned if an input failure occurs before any conversion such as an end-of-file occurs.  If an error or end-of-file occurs after conversion has
     begun, the number of conversions which were successfully completed is returned.

Reset ★★★★★
()

Подправил код @Reset’а для кудахтающих про проверки на ошибки. Авторский стиль сохранен. Код по-прежнему очень лаконичен, и даже не приходится обмазываться угловыми скобками.

int* A = NULL;
int i, j, n, m;
if (scanf("%d%d", &n, &m) != 2) goto err;
A=malloc(n*m*sizeof(int));
if (!A) goto err;
for (i = 0; i < n; ++i) {
  for (j = 0; j < m; ++j) {
    if (scanf("%d", &A[i*m+j]) != 1) goto err;
  }
}

// some code

err:
free(A);
anonymous
()
Ответ на: комментарий от Reset

Из всего этого scanf может вернуть только EOF.

Я и не спорю. Когда оно возвращает EOF, то выставляет errno в одно из перечисленных значений.

[del@del-debian scanf]$ cat test_scanf.c 
#include <errno.h>
#include <stdio.h>
#include <string.h>

int main(void) {
	int penis;
	penis = scanf(NULL);
	if(EOF == penis) {
		fprintf(stderr, "NERABOTAET: %s\n", strerror(errno));
	}
	return 0;
}
[del@del-debian scanf]$ gcc test_scanf.c -o test_scanf
[del@del-debian scanf]$ ./test_scanf 
NERABOTAET: Invalid argument
BackDoorLover
()
Ответ на: комментарий от Stack77

Устройство памяти и адресная арифметика объяснимы в рамках одной лекции.

thunar ★★★★★
()
Ответ на: комментарий от PURGEN143

учу по ютубу

А книжки читать не пробовал?

Я серьёзно, ютуб учит, по какому месту палкой ударить, чтобы банан упал. А понимания тебе ютуб не даст. Ютуб может помочь в каких-то визуальных вещах (до которых твоей задаче на транспонирование очень далеко).

hobbit ★★★★★
()
Ответ на: комментарий от cloun1901

Я даже не говорил «лучше», я говорил «для другого». И да, для понимания основ нужна книга.

Книга даёт структурированную информацию для самостоятельного осмысления. Видео же даёт большой непереваренный кусок «делай так». «Почему так» — не даёт, и как только тебе надо будет отойти в сторону немного другой ситуации — ты окажешься беспомощен.

Видео в ряде случаев может быть хорошей иллюстрацией к книге. Но не наоборот.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Книга даёт структурированную информацию для самостоятельного осмысления. Видео же даёт большой непереваренный кусок «делай так».

С чего бы вдруг? Вообще не отличается ни разу видео и книга по содержанию. Видео может всё тоже, что и книга. Только лучше.

Например, многие книги из PacktPub доступны в виде видео, где автор вслух произносит, что написано в книге, и примеры показывает не в виде листинга, а в IDE.

Самостоятельно можно обдумывать и просмотренное…

fsb4000 ★★★★★
()
Ответ на: комментарий от hobbit

Я серьёзно, ютуб учит, по какому месту палкой ударить, чтобы банан упал. А понимания тебе ютуб не даст.

Я даже не говорил «лучше», я говорил «для другого»

Так себе заход, но не суть - ты понял, о чём я спрашивал, остальное не важно.

Видео даёт структурированную информацию для самостоятельного осмысления. Книга же даёт большой непереваренный кусок «делай так». «Почему так» — не даёт, и как только тебе надо будет отойти в сторону немного другой ситуации — ты окажешься беспомощен

Не сочти за грубость, но смысл не поменялся. «информация для самостоятельного осмысления» и «делай так»(или «думай так») - одно и то же с разных ракурсов.

как только тебе надо будет отойти в сторону немного другой ситуации — ты окажешься беспомощен

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

cloun1901
()
Ответ на: комментарий от cloun1901

Видео тупо медленнее, причём на порядок (нет, воспроизведение на двойной скорости не спасёт). В видео не работает поиск (мы же не про книги из мёртвых деревьев говорим?), на ютупчике даже закладок толком не понаставишь, так что как справочный материал не годится в принципе. В книге ты можешь окинуть взглядом станицу и примерно понять, о том ли там говорится, что тебе интересно; в видео ты вынужден прослушать большой кусок. Видео изобилует лишними деталями, не имеющими никакого отношения к содержанию — начать хотя бы с голоса(-ов) произносящего, а то и их морд лица; текст, хотя и содержит детали вроде индивидуального стиля, всё-таки менее завязан на личность автора(-ов).

Достаточно пока?

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

В видео не работает поиск (мы же не про книги из мёртвых деревьев говорим?), на ютупчике даже закладок толком не понаставишь, так что как справочный материал не годится в принципе.

Accepted.

В книге ты можешь окинуть взглядом станицу и примерно понять, о том ли там говорится, что тебе интересно; в видео ты вынужден прослушать большой кусок.

Это в ту же степь, что и поиск.

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

Это особенность авторов, а не формата - мимо.

Достаточно пока?

Пару преимуществ(причём технических) никак не могут быть подтверждением такого:

Я серьёзно, ютуб учит, по какому месту палкой ударить, чтобы банан упал. А понимания тебе ютуб не даст.

как только тебе надо будет отойти в сторону немного другой ситуации — ты окажешься беспомощен

Поэтому нет, не достаточно.

cloun1901
()
Ответ на: комментарий от cloun1901

Это в ту же степь, что и поиск.

Примерно в ту же сторону, да.

Это особенность авторов, а не формата - мимо.

Это особенность авторов, которая проявляется в одном формате, но не проявляется в другом. Так что не мимо.

никак не могут быть подтверждением такого

А я «такого» подтверждать не нанимался. Я отвечал на

ни один «книга лучше ютуба» человек не объяснил, чем лучше

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Это особенность авторов, которая проявляется в одном формате, но не проявляется в другом. Так что не мимо.

Не важно, пусть так. Тем более, доля правды в этом есть.

А я «такого» подтверждать не нанимался.

Ok. Мой вопрос не совсем полный был.

cloun1901
()
Ответ на: комментарий от Miguel

Дополнение: пункты про «быстро глянуть и понять, о том ли это вообще» и про «читать быстрее, чем смотреть» работают не только для электронных книг, но и для пергаментных.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Электронные книги - уг: не годятся ни на растопку, ни на вытирание задницы. И по башке электронной книгой не треснешь никого, даже себя, а как читать, например, ландафшица, если не бить себя постоянно им по башке?

BackDoorLover
()
integer n, m, k
real, allocatable :: a(:,:,:)

allocate(a(n, m, k))
hotpil ★★★★
()
Ответ на: комментарий от PURGEN143

Согласен, но результат нужен довольно скоро)

В задании не оговаривается еа каком компьютерном языке должна быть написанна программа, так что именно это задание можно написать и на bash, его можно изучать в минимально необходимых для выполнения задания объёмах, но конечно для серьёзных программ он не подходит, а значит потом изучай С.

torvn77 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.