Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
taorange
0 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 8
1

Скопировать содержимое текстового файла, ограничив длину строки N символами

02.11.2010, 22:43. Просмотров 1095. Ответов 3
Метки нет (Все метки)

здравствуйте
есть задание: скопировать содержимое текстового файла, ограничив длину строки N символами. слова, не помещающиеся в заданную строку не копировать.
я написала следующий код

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <stdlib.h>
 
#define N 5
 
void main(void)
{   
    char c; 
    char string[N+1];
    char *wfileinput  = (char*)calloc(20, sizeof(char));
    char *wfileoutput = (char*)calloc(20, sizeof(char));
    FILE *fileinput;
    FILE *fileoutput;
 
    printf("put' vh. faila");
    scanf("%s", wfileinput);  
    printf("put' rez. faila");
    scanf("%s", wfileoutput);   
    fileinput  = fopen(wfileinput,  "rt");
    fileoutput = fopen(wfileoutput, "wt");  
    while(c != EOF)
    {
        fgets(string, N + 1, fileinput);
        fputs(string, fileoutput);
        fputc('\n', fileoutput);        
        while (c != '\n' && c != EOF)
            c = fgetc(fileinput);       
        if (c != EOF)
            c = ' ';
    }   
    free(wfileinput);
    free(wfileoutput);  
}
впоследствии выяснилось, что работу нужно было сделать через указатели (вместо char c - char *c и т..д.). я указатели не очень понимаю, поэтому исправить не получается, например, непонятно как исправить условие while(c != EOF) с использованием указателя. помогите пожалуйста
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2010, 22:43
Ответы с готовыми решениями:

Скопировать содержимое текстового файла, ограничив длину строки N символами
Задание: Скопировать содержимое текстового файла, ограничив длину строки N символами. Слова,...

Скопировать содержимое, ограничив длину строки N символами
Всем доброго времени суток, нужна помощь с задачей: &quot;Скопировать содержимое текстового файла,...

Скопировать содержимое текстового файла, удаляя строки, если они уже встречались ранее
#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { int maxsize=0;...

Скопировать содержимое текстового файла
Скопировать содержимое текстового файла, удалив в каждой строке предпоследнее слово. Выдает...

Скопировать содержимое текстового файла
Задание: Скопировать содержимое текстового файла, ограничив длину строки N символами. Слова, не...

3
ForEveR
В астрале
Эксперт С++
8003 / 4761 / 653
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
02.11.2010, 22:47 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h> 
 
#define N 5
 
void main(void)
{       
        char* c; 
        c=(char*)malloc(sizeof(char));
        char* string;
        string=(char*)malloc(sizeof(char)*(N+1));
        char *wfileinput  = (char*)calloc(20, sizeof(char));
        char *wfileoutput = (char*)calloc(20, sizeof(char));
        FILE *fileinput;
        FILE *fileoutput;
 
        printf("put' vh. faila");
        scanf("%s", wfileinput);  
        printf("put' rez. faila");
        scanf("%s", wfileoutput);       
        fileinput  = fopen(wfileinput,  "rt");
        fileoutput = fopen(wfileoutput, "wt");  
        while(*c != EOF)
        {
                fgets(string, N + 1, fileinput);
                fputs(string, fileoutput);
                fputc('\n', fileoutput);                
                while (*c != '\n' && *c != EOF)
                        *c = fgetc(fileinput);           
                if (*c != EOF)
                        *c = ' ';
    }   
        free(wfileinput);
        free(wfileoutput);
        free(c);
        free(string);      
}
0
accept
4835 / 3257 / 464
Регистрация: 10.12.2008
Сообщений: 10,569
03.11.2010, 05:29 3
char c - это неправильно, EOF совпадёт с символом, у которого код 0xFF
по этой причине применяется int c, который однозначно различает EOF и 0xFF

C
1
2
    while(*c != EOF)  {
        fgets(string, N + 1, fileinput);
C
1
2
3
    while(fgets(string, N + 1, fileinput) != NULL)
        if (*string == '\0')
            continue;

C
1
2
        fputs(string, fileoutput);
        fputc('\n', fileoutput);
тут нужно проверить, а не короткая ли там строка
если она короче N, то перевод строки не нужен

поэтому сначала проверяем, сразу удаляем его
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    char *p;
 
    while(fgets(string, N + 1, fileinput) != NULL) {
 
        if (*string == '\0')
            continue;
 
        if ((p = strchr(string, '\n')) != NULL)
            *p = '\0';
 
        if (fprintf(fileoutput, "%s\n", string) < 0)
            break;
 
    }
 
    if (ferror(fileoutput)) {
        fprintf(stderr, "error: ouput to the file\n");
        return EXIT_FAILURE;
    }
тут не хватает, значит, проверки, есть ли непомещающееся слово (если оно есть, строку надо укоротить с конца)
1
accept
4835 / 3257 / 464
Регистрация: 10.12.2008
Сообщений: 10,569
04.11.2010, 07:23 4
обновил там проверку

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    int c;
    char *p;
 
    while(fgets(string, N + 1, fileinput) != NULL) {
 
        if (*string == '\n')
            continue;
 
        if ((p = strchr(string, '\n')) != NULL)
            *p = '\0';
        else
            while ((c = getc(fileinput)) != EOF && c != '\n')
                ;
 
        if (fprintf(fileoutput, "%s\n", string) < 0)
            break;
 
    }
 
    if (ferror(fileoutput)) {
        fprintf(stderr, "error: ouput to the file\n");
        return EXIT_FAILURE;
    }
, ещё интересно, если строка в файле одна и не помещается в N, вторая часть становится следующей строкой, или нет
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2010, 07:23

Скопировать содержимое текстового файла, удалив в каждой строке слово номер N
Здравствуйте! Помогите понять задание... Задание: Работа с файлами. Обработку символьной...

Скопировать строки из одного текстового файла в другой, расположив их в нем в порядке уменьшения длины
Всем привет! Помогите мне с решением данной задачи! Мне уже через 4.5 часа ее нужно будет сдавать,...

Скопировать содержимое одного файла в другой файл
Скопировать содержимое одного файла в другой файл. Для копирования использовать функции блочного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru