У меня есть следующий код, который воспроизводит функциональность команды w c в оболочке, но у меня есть некоторые проблемы с тем, как мой код отображает строки, слова и байты. Существует проблема с пробелами между первым и вторым и между вторым и третьим столбцом. Мне нужно получить тот же вывод, что и команда w c в linux. Выходные данные, которые я получаю:
< 10 144 12632 wcfile
< 22 60 465 Makefile
< 20 136 8536 wcfile2
< 12 149 12640 ceva
< 11 151 12632 ceva2
< 75 640 46905 total
Выходные данные, которые я хочу:
> 10 123 12632 wcfile
> 22 60 465 Makefile
> 20 106 8536 wcfile2
> 12 116 12640 ceva
> 11 112 12632 ceva2
> 75 517 46905 total
Код:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int sumL=0,sumW=0,sumB=0,index=0;
char buffer[1];
enum states { WHITESPACE, WORD };
if ( argc==1 )
{
printf( "Nu ati introdu snumele fisierului\n%s", argv[0]);
}
else
{
while(--argc>0)
{
int bytes = 0;
int words = 0;
int newLine = 0;
int state = WHITESPACE;
FILE *file = fopen( *++argv, "r");
if(file == 0)
{
printf("can not find :%s\n",argv[1]);
}
else
{
char *thefile = *argv;
while (read(fileno(file),buffer,1) ==1 )
{
bytes++;
if ( buffer[0]== ' ' || buffer[0] == '\t' )
{
state = WHITESPACE;
}
else if (buffer[0]=='\n')
{
newLine++;
state = WHITESPACE;
}
else
{
if ( state == WHITESPACE )
{
words++;
}
state = WORD;
}
}
printf(" %d %d %d %s\n",newLine,words,bytes,thefile);
sumL+=newLine;
sumW+=words;
sumB+=bytes;
index++;
}
}
if(index>1)
printf(" %d %d %d total \n",sumL,sumW,sumB);
}
return 0;
}
Я не знаю количество пробелов между столбцами, это зависит от последней строки (итоговая строка), поскольку она имеет самые длинные числа