Перенаправление потокового вывода, отладка и проверка производится на терминале UNIX'а - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <wait.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdbool.h>
 
int main(){
 
    int i, j, y, c,f2, f3;
    bool f1;
    const int Slen = 4096;
    int fd[2];
    i = 0;
    j = 0;
    y = 0;
    c = 0;
    f1 = false;
    f2 = -1;
    f3 = 0;
    char **b;
    b=malloc(256*sizeof(char*));
    for (i = 0; i < 256; i++) b[i]=malloc(Slen);
    i=0;
    while (c != EOF) 
    {
       for (i = 0; i < 256; i++) b[i][0] = '\0';
       while (((c = getchar() != '\n' || (c != EOF)) && ((f3 + y) < Slen)) { 
          if ((c != ' ' && (c != '\t' && (c != '>' )
          {
                 b[i][j] = c;
                 y++;
                 j++;
          }
          if ((c == ' ' && (c == '\t' ) 
          {
                 i++;
                 j=0;
                 f3++;
          }
          if (c == '>' f2 = i;
          if (y == Slen) 
          {
                 printf("String is too long" ;
                 f1 = true;
          }
       } 
       if (f1){
       fd[0] = open(b[f2], 0);
       b[i]=0;
       if(fork()==0)
       {
dup2(fd[0],1);
                    execvp(b[0],b+1);
                    exit(0);
       }
       wait(&c);
       
       }
}
       else
{ while (((c = getchar()) != EOF) && (c != '\n' );}
    close(fd[0]);
    close(fd[1]);
    return 0;
}

Решение задачи: «Перенаправление потокового вывода, отладка и проверка производится на терминале UNIX'а»

textual
Листинг программы
while ((c = getchar()) != '\n' && c != EOF && f3 + y < Slen)

Объяснение кода листинга программы

  1. В этом коде используется оператор while, который выполняет указанное в нём условие до тех пор, пока оно истинно.
  2. Внутри оператора while происходит операция присваивания переменной c значения, возвращаемого функцией getchar().
  3. Функция getchar() используется для чтения символа из стандартного ввода (обычно это клавиатура).
  4. Оператор сравнения проверяет, что считанный символ не является символом новой строки '\n' и не является концом файла EOF.
  5. Условие также проверяет, что значение переменной f3 плюс значение переменной y меньше длины строки Slen.
  6. Если условие истинно, то происходит переход к следующей итерации цикла.
  7. Если условие ложно, то происходит выход из цикла.
  8. В этом коде нет использования переменной f3 и y, поэтому их значения не определены.
  9. Переменная Slen содержит длину строки S.
  10. Значение переменной c не определено, поскольку она используется только внутри цикла и её значение не сохраняется после окончания итерации.
  11. В этом коде нет ввода или вывода данных, поэтому переменная S не определена.
  12. Значение переменной EOF не определено, поскольку она используется только в условии цикла и её значение не сохраняется.
  13. В этом коде нет использования переменной Slen, поэтому её значение не определено.
  14. В этом коде нет использования переменной c, поэтому её значение не определено.
  15. В этом коде нет использования переменной EOF, поэтому её значение не определено.
  16. В этом коде нет использования переменной S, поэтому её значение не определено.
  17. В этом коде нет использования переменной f3, поэтому её значение не определено.
  18. В этом коде нет использования переменной y, поэтому её значение не определено.
  19. В этом коде нет использования переменной Slen, поэтому её значение не определено.
  20. В этом коде нет использования переменной c, поэтому её значение не определено.

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы