Указатели - чтение, запись, копирование текста в c в двух файлах - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть задача. Я должен написать программу, которая получает текст из файла (source.txt) и помещает их в массив, затем я записываю этот массив в другой файл (result.txt), затем копирую массив в другой массив и помещаю этот массив в result.txt, а затем я беру символы с клавиатуры и помещаю их в массив и в текстовый файл. Я должен создавать функции в отдельных файлах, и я должен работать на POINTERS . Компиляция моей программы в порядке, но в result.txt у меня ничего нет и я не знаю почему? Это моя основная программа eng. c

#include <stdio.h>
#include <stdlib.h>
#include "eng_fun.h"

int main (int argc, char *argv[])
{
    int c, i; 
    char *s, *t, *r;  
    FILE *wz, *wc;                         
    char arr[10000];
    s = arr;
    char copyArr[10000];    
    t = copyArr;
    char keyArr[10000]; 
    r = keyArr;

    if (argc != 3) {                              
    printf("Wrong arguments number\n");
    printf("I should run this way:\n");
    printf("%s source result\n",argv[0]);
    exit(1);
    }

    if( (wz= fopen(argv[1],"r")) == NULL) {
        printf("Open error %s\n", argv[1]);
        exit(1);
    }
    if( (wc= fopen(argv[2], "w")) == NULL) {
        printf("Open error %s\n", argv[2]);
        exit(2);
    }

    fprintf(wc, "Read text from file source.txt and write into result.txt:\n");

    readText(wz, s, 10000);   
    writeText(wc, s); 
    textStats(wc, s);

    fprintf(wc, "\nCopy and paste array and write into result.txt:\n\n");

    copyText(s, t, 10000);        
    writeText(wc, t);                   
    textStats(wc, t);

    fprintf(wc, "\nText from keyboard to array and then to file result.txt\n\n");
    printf("Write some sentence and press CTRL+D. All text will write to result.txt\n");
    while( (*r++ = getchar()) != EOF )

    writeText(wc, r);
    textStats(wc, r);

    int fclose(FILE *wz);
    int fclose(FILE *wc);

    return 0;
}

Это моя программа с функциями eng_fun. c

#include <stdio.h>
#include <stdlib.h>


int _strlen (char *array)   // here I check array length
{
    int i;
    for (i = 0; array[i] != '\0'; ++i);    
    return i;   
}

int writeText(FILE *wp, char *s)
{
    int sum = 0;
    while((*s++ = fputc(*s, wp)))
    {
        sum++;
    }
    return sum;   //I must return array length in my task, so I choose sum to  count how many signs I put
}


int readText(FILE *wp, char *s, int max)
{
    int sum = 0;

    while((*s++ = fgetc(wp)) != EOF)
    {
        sum++;
    }
    return sum;  //I must return array length
}

int copyText (char *s, char *t, int max)  
{
    if (_strlen(t) > max)
    {
        printf("This array is too big.");
    }
    else
    {
        while((*s++ = *t++));
    }
    return _strlen(t);  //I must return array length in my task
}

int allSigns(char *s) // count all signs
{
    int sum = 0;
    while (*s++ != '\0')
    {
        sum++;
    }
    return sum;
}

int notWhiteSigns(char *s) //count notWhiteSigns
{
    int sum = 0;
    while (*s++ != '\0')
    {
        if ((*s != ' ') && (*s != '\n') && (*s != '\t')  && (*s != '\v'))
            sum++;
    }
    return sum;
}

int lines(char *s) // count lines
{
    int sumLines = 1;
    while (*s++ != '\0')
    {
        if (*s++ == '\n')
            sumLines++;
    }
    return sumLines;
}

int words(char *s) // here I count words
{
    int sum = 0;
    *s++;
    while (*s != '\0')
    {
        if (*s == ' ' && *(s-1) != ' ' && *s != ('\n' || '\t' || '\v') && (*(s-1) != ('\n' || '\t' || '\v')))
            sum++;
    }
    if (*s-1 != ' ');
        sum++;
    return sum;
}


int textStats(FILE *wp, char *s) // (here I write stats)   
{
    fprintf(wp, "All signs: %i\n not white signs: %i\n words: %i\n lines: %i\n\n\n\n", allSigns(s), notWhiteSigns(s), words(s), lines(s));
    return 0;
}

и файлом eng_fun.h

#ifndef A_A
#define A_A

int _strlen (char *tab);
int writeText(FILE *wp, char *s);
int readText(FILE *wp, char *s, int max);
int copyText(char *s, char *t, int max);
int allSigns(char *s);
int notWhiteSigns(char *s);
int lines(char *s);
int words(char *s);
int textStats(FILE *wp, char *s);
#endif

Мой source.txt

A computer is a machine that can be instructed to carry out sequences of arithmetic or logical operations 
automatically via computer programming. Modern computers have the ability to follow generalized sets of 
operations, called programs. These programs enable computers to perform an extremely wide range of tasks. 

И файл result.txt в начале пустой

Я скомпилировал свой файл таким образом

gcc -c eng.c
gcc -c fun_eng.c
gcc -o eng.x eng.o fun_eng.o
./eng.x source.txt result.txt

Компиляция хорошо, но у меня ничего нет в result.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...