Программа пролистывает функцию scanf()

Рейтинг: -1Ответов: 1Опубликовано: 24.03.2023

Когда запускаю программу обычным способом './a.out' она работает нормально, но когда запускаю вот так 'cat text.txt|./a.out' то программа просто проходится по коду без остановок на 'scanf()' и просто заканчивается. Даже если убрать весь код и оставить только переменную и scanf() то при такой команде 'cat text.txt|./a.out' оно все ровно не позволяет нечего вводить и просто заканчивается. В файле text.txt храниться текст которым я контактирую с пользователем. Программу я только начал писать и вот всё что есть. Подскажите пожалуйста, как это исправить?

    int *matrix1;
    int *matrix2;
    int links = 0;
    int colums;
    int error_input;
    int true_input = 1;
    int write_size_matrix;
    int write_value_matrix;
    int exit;
    
    
    char autor[44];
    fgets(autor, 44, stdin);
    
    char group[23];
    fgets(group, 23, stdin);
    
    char number_lab[53];
    fgets(number_lab, 53, stdin);
    
    char thema[125];
    fgets(thema, 125, stdin);
    
    char how_links[47];
    fgets(how_links, 47, stdin);
    
    char how_colums[53];
    fgets(how_colums, 53, stdin);
    
    char value_matrix1[82];
    fgets(value_matrix1, 82, stdin);
    
    char value_matrix2[82];
    fgets(value_matrix2, 82, stdin);
    
    char error_format_value[61];
    fgets(error_format_value, 61, stdin);
    
    char error_eq_size[123];
    fgets(error_eq_size, 123, stdin);
    
    char overwrite_value[222];
    fgets(overwrite_value, 222, stdin);
    
    char result_mul[70];
    fgets(result_mul, 70, stdin);
    
    printf("\n%s\n%s\n%s\n%s",autor,group,number_lab,thema);
    
    
while(true_input == 1)
    {
        printf("\n%s",how_links);
        scanf("%d", &links);
        
        if( error_input != 1)
        {
            printf("\n%s",how_colums);
            if((error_input = scanf("%d", &colums)) != 1)
            {
                true_input = 0;
            }
        }
        
    }
    
    printf("\n%s",how_links);
    scanf("%d", &links);
    
    
    return 0;

Ответы

▲ 2

Только что проверил работоспособность на онлайн-терминале Linux. Программа была такая:

#include <stdio.h>
int main()
{
char str[100];
scanf("%s", str);
printf("You entered: ", str);
}

Файл text.txt:

12345

Запускаю программу:

cat text.txt|./a.out

Получаю вывод:

You entered: 12345

Вывод: scanf, команда cat и оператор "труба" (|) выполняют свою работу как и должны.