Как сделать программу на языке Си, которая имитирует команду grep, и она также должна работать в linux...только последняя строка в файле печатается 2 раза..
напишите программу на языке Си, чтобы имитировать команду "grep", которая находится в linux...и ошибка заключается в том, что если мы ищем шаблон, который находится в файле...если этот шаблон находится в последней строке, то он ищет и печатает 2 раза ...за исключением последней строки, если мы ищем шаблон, который находится в другой строке, он печатает именно эту строку 1 раз
Что я уже пробовал:
#include<stdio.h> #include<string.h> void main() { char fn[30],pat[30],temp[200]; FILE *fp; printf("Enter file name\n"); scanf("%s",fn); printf("Enter pattern to be searched\n"); scanf("%s",pat); fp=fopen(fn,"r"); while(!feof(fp)) { fgets(temp,1000,fp); if(strstr(temp,pat)!=NULL) printf("%s",temp); } fclose(fp); }
Richard MacCutchan
Вы выделили 200 символов для temp, но затем вызываете fgets и говорите ему, что temp имеет длину 1000 символов. Используйте #defines для установки размеров массива, чтобы везде использовать одно и то же значение.
k5054
А еще лучше, используйте getline()
напр.
#включить <stdio.h>
#include <stdlib.h>
char *input = NULL;
size_t len = 0
определены input_len;
input_len = вызовом getLine(&ампер;вход &амп;лен стандартного ввода);
/* ... ввод процесса ... */
бесплатно(вход);
Richard MacCutchan
И я не думаю, что это предназначалось для меня тоже. У тебя сегодня плохой день?
sai charan_12
могу ли я получить точный код для этого ответа, пожалуйста
sai charan_12
я много пробовал, но не могу его закодировать, так что, пожалуйста ...
Rick York
Я написал свой собственный grep много-много лет назад и не утруждал себя оценкой причудливых выражений. Я просто принял аргумент в пользу соответствия с учетом регистра или нет, что весьма полезно. Затем я добавил простой сопоставитель подстановочных знаков, чтобы принимать различные шаблоны имен файлов. Это тоже было очень полезно.
Я рекомендую начать с немного более простой реализации, что-то вроде того, что я описал.