Перевод потока для чтения, после получения данных из files в stdin UNIX C
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define ROW 25
#define COLLUMN 80
int input(int arr[ROW][COLLUMN]);
int output(int arr[ROW][COLLUMN]);
int main(void) {
int curr[ROW][COLLUMN], prev[ROW][COLLUMN];
input(curr);
output(curr);
return 0;
}
int input(int arr[ROW][COLLUMN]) {
for (int i = 0; i < ROW; ++i) {
for (int j = 0; j < COLLUMN; ++j) {
if (scanf("%d", &(arr[i][j])) != 1) {
}
}
printf("\n");
}
return 0;
}
int output(int arr[ROW][COLLUMN]) {
for (int i = 0; i < ROW; ++i) {
for (int j = 0; j < COLLUMN; ++j) {
if (arr[i][j] == 1) {
printf("o");
} else {
printf(" ");
}
}
printf("\n");
}
}
Данные файла sample.txt
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000001111110000000000000000000000000000000000000000000000000000
00000000000000000000111111111100000000000000000000000000000000000000000000000000
00000000000000000011111111111110000000000000000000000000000000000000000000000000
00000000000000000111111111111111000000000000000000000000000000000000000000000000
00000000000000000111111111111111110000000000000000000000000000000000000000000000
00000000000000001111111111111111111000000000000000000000000000000000000000000000
00000000000000011111111111111111110000000000000000000000000000000000000000000000
00000000000000001111111111111111100000000000000000000000000000000000000000000000
00000000000000000111111111111111000000000000000000000000000000000000000000000000
00000000000000000011111111111110000000000000000000000000000000000000000000000000
00000000000000000001111111111100000000011111000000000000000000000000000000000000
00000000000000000000111111110000000000010101000000000000000000000000000000000000
00000000000000000000001110000000000000011111000000000000000000000000000000000000
00000000000000000000000110000000000000000110000001100000000000000000000000000000
00000000000000000000000011101000000001101111111111100000000000000000000000000000
00000000000000000000000000111100000001101111100000000000000000000000000000000000
00000000000000000000000000001110000001101111100000000000000000000000000000000000
00000000000000000000000000000101111111101111100000000000000000000000000000000000
00000000000000000000000000000000000000001101100000000000000000000000000000000000
00000000000000000000000000000000000000001101100000000000000000000000000000000000
00000000000000000000000000000000000000001101100000000000000000000000000000000000
00000000000000000000000000000000000000011101110000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
Метод для перевода потока ./a.out < sample.txt
Как избавится и реорганизовать программу для коректного ввода данных. Чтобы считывать после символы из консоли, а не упираться в file.
Ответы (2 шт):
Автор решения: Oh-Ben-Ben
→ Ссылка
А зачем вам опираться на структуру того что может прийти ? Читайте как есть из STDIN_FILENO кусками и все что есть выкидывайте в STDOUT
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define RB_SIZE 512
int main(void)
{
char rbuff[RB_SIZE + 1];
ssize_t rb_size = 0;
do
{
rb_size = read(STDIN_FILENO, rbuff, RB_SIZE);
if (rb_size <= 0)
{
break;
}
write(STDOUT_FILENO, rbuff, rb_size);
} while (rb_size > 0);
return EXIT_SUCCESS;
}
Работает как с cat ./1.json | ./a.out так и с ./a.out < ./1.json
Автор решения: Sergey
→ Ссылка
А зачем Вы используете этот чудовищный массив? Сначала - формируете его, потом - распечатываете. Но ведь Вам нужно всего лишь убрать всё, кроме "1".
Надо просто объединить ввод и вывод. Как-то так:
int input_output(int arr[ROW][COLLUMN]) {
int x;
for (int i = 0; i < ROW; ++i) {
for (int j = 0; j < COLLUMN; ++j) {
if (scanf("%d", &x) != 1) {
if (x == 1) {
printf("o");
} else {
printf(" ");
}
}
}
printf("\n");
}
return 0;
}
И массив становится абсолютно не нужным.