Форум — Development [C] Разбить ввод на блоки c 0 0 Всем привет. Нужно постоянно считывать stdin, т.е. while((fgets(buff,LINE_MAX,stdin))!=NULL) потом разбивать полученные данные на 4-байтовые блоки, т.е. думаю создать массив, строки для хранения, столбцы для индекса. char ch[3][MAX]; и записывать туда данные. Или как по другому лучше поступить?! Ссылка
Ответ на: комментарий от ananas 10.04.10 15:58:31 MSD моно пример? aunt (10.04.10 15:59:36 MSD) автор топика Показать ответ Ссылка
Ответ на: комментарий от aunt 10.04.10 15:59:36 MSD Наверно имеется в виду что-то вроде union { char ch[100500]; uint32_t blocks[100500 / 4]; } buf;Пишешь в buf.ch, читаешь из buf.blocks unsigned ★★★★ (10.04.10 16:18:51 MSD) Показать ответы Ссылка
Ответ на: комментарий от unsigned 10.04.10 16:18:51 MSD В общем, примерно то же что и у тебя, только с этим 4-байтовые блоки char ch[3][MAX];стоит еще подумать. unsigned ★★★★ (10.04.10 16:20:38 MSD) Показать ответ Ссылка
Ответ на: комментарий от unsigned 10.04.10 16:20:38 MSD >стоит еще подумать. почему? Что не так? aunt (10.04.10 16:31:22 MSD) автор топика Показать ответ Ссылка
Ответ на: комментарий от unsigned 10.04.10 16:18:51 MSD именно ananas ★★★★★ (10.04.10 16:36:12 MSD) Ссылка
Ответ на: комментарий от aunt 10.04.10 16:31:22 MSD Намек на то, что ожидалосьchar ch[4][MAX]; unsigned ★★★★ (10.04.10 16:44:19 MSD) Показать ответ Ссылка
Ответ на: комментарий от unsigned 10.04.10 16:44:19 MSD >Намек на то, что ожидалось char ch[4][MAX]; ну так индекс. с 0 нач. aunt (10.04.10 16:51:33 MSD) автор топика Показать ответы Ссылка
Ответ на: комментарий от aunt 10.04.10 16:51:33 MSD Индекс здесь ни при чем, в объявлении указывается количество элементов массива. a[4] - массив из четырех элементов. unsigned ★★★★ (10.04.10 16:57:13 MSD) Показать ответ Ссылка
Ответ на: комментарий от aunt 10.04.10 16:51:33 MSD > ну так индекс. с 0 нач. При объявлении массива указывается размерность, а не индекс. Zitzy (10.04.10 16:57:47 MSD) Ссылка
Ответ на: комментарий от unsigned 10.04.10 16:57:13 MSD >a[4] - массив из четырех элементов. да точно, не о том подумала aunt (10.04.10 16:59:41 MSD) автор топика Ссылка
Ответ на: комментарий от unsigned 10.04.10 16:18:51 MSD а как лучше с stdin-а сразу писать в buf.ch?! aunt (10.04.10 20:33:58 MSD) автор топика Показать ответ Ссылка
Ответ на: комментарий от aunt 10.04.10 20:33:58 MSD while(ret=(read(STDIN_FILENO,buf.ch,SIZE))>0) - Так?! aunt (10.04.10 20:50:55 MSD) автор топика Показать ответ Ссылка
Ответ на: комментарий от aunt 10.04.10 20:50:55 MSD Думаю, где-то так:char *pos = buf.ch; do { ret = read(STDIN_FILENO, pos, SIZE); pos += ret; } while(ret); unsigned ★★★★ (11.04.10 15:43:45 MSD) Показать ответ Ссылка
Ответ на: комментарий от unsigned 11.04.10 15:43:45 MSD мне нужно читать входной поток, потом разбивать его на блоки по 4-байта, если не кратно 4 добавить нули, и эти блоки передавать в функцию обработки. aunt (11.04.10 15:51:11 MSD) автор топика Показать ответ Ссылка
Ответ на: комментарий от aunt 11.04.10 15:51:11 MSD А в чем тут проблема? Все же очевидно. unsigned ★★★★ (11.04.10 19:08:20 MSD) Показать ответ Ссылка
Ответ на: комментарий от unsigned 11.04.10 19:08:20 MSD для меня нет, не получается никак сделать нормально aunt (11.04.10 20:07:49 MSD) автор топика Показать ответ Ссылка
Ответ на: комментарий от aunt 11.04.10 20:07:49 MSD add = (pos - buf.ch) % 4; n = (pos - buf.ch) / 4; if(add) { memset(pos, 0, 4 - add); ++n; } for(i = 0; i != n; ++i) myfunc(buf.blocks[i]);Я бы сделал примерно так, только проверить надо. unsigned ★★★★ (12.04.10 00:40:06 MSD) Ссылка