Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
23 / 10 / 1
Регистрация: 08.10.2015
Сообщений: 356
1

Лишние символы новой строки при выводе из файла

16.04.2017, 16:32. Показов 681. Ответов 1
Метки нет (Все метки)

Здравствуйте!
При выводе из файла печатаются лишние символы новой строки.
Подскажите, пожалуйста, откуда они берутся?
Код программы:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
 
#define MAXLENGTH 1000      //длина предложения
#define MAXLINE 100         //количество предложений
#define ADRES "C:\\CProjectFile\\UP18text.txt"
 
void vvodmas(char line[][MAXLENGTH],int length[],int *lengthline);
void writefile(FILE* file,char line[][MAXLENGTH],int length[],int *lengthline);
void vvodfile(FILE* file,char line[][MAXLENGTH],int length[],int lengthline);
void writeline(char line[][MAXLENGTH],int length[],int lengthline);
int vvodi(int min,int max);
double vvodd(double min,double max);
 
int main()
{char line[MAXLINE][MAXLENGTH];
int length[MAXLINE],lengthline;
setlocale(LC_ALL,"RUS");
vvodmas(line,length,&lengthline);
    return 0;
}
 
void vvodmas(char line[][MAXLENGTH],int length[],int *lengthline)
{int i,j;
char c;
FILE* file;
    printf("Загрузить текст из файла?\n");
    if (vvodi(0,1)==1)
        writefile(file,line,length,lengthline);
    else
        *lengthline=EOF;
    if(*lengthline==EOF)
    {
        printf("Введите текст вручную (для завершения ввода нажмите ctrl+Z)\n");
                    for(i=j=0;(((c=getchar())!=EOF)&&(j!=MAXLINE-1));++i)
                    {
                        line[j][i]=c;
                        if ((c=='.')||(c=='!')||(c=='?')||(c=='…')||(i==MAXLENGTH-2))
                        {
                            line[j][i+1]='\n';
                            length[j]=i+2;
                            i=-1;
                            ++j;
                        }
                    }
                    line[j][i]='\n';
                    *lengthline=j;
        printf("Сохранить текст в файл?\n");
        if (vvodi(0,1)==1)
            vvodfile(file,line,length,*lengthline);
    }
    else
        writeline(line,length,*lengthline);
}
void writefile(FILE* file,char line[][MAXLENGTH],int length[],int *lengthline)
{int i,j;
char c;
    if ((file=fopen(ADRES,"r"))==NULL)
    {
        printf("Файл не создан\n");
        *lengthline=EOF;
    }
    else if ((fscanf(file,"%d",lengthline))==EOF)   //распаковка количества строк
    {
        printf("Файл пустой\n");
        *lengthline=EOF;
    }
    else
    {
        for(i=0;i<*lengthline;++i)
                fscanf(file,"%d",length+i);         //распаковка длин строк
        for(i=0;i<*lengthline;++i)
            for(j=0;j<length[i];++j)
                fscanf(file,"%c",line[i]+j);        //распаковка строк
      }
        fclose(file);
}
 
void vvodfile(FILE* file,char line[][MAXLENGTH],int length[],int lengthline)
{int i,j;
    file=fopen(ADRES,"w");
    fprintf(file,"%d\n",lengthline);//упаковка количества предложений
    for(i=0;i<lengthline;++i)
    fprintf(file,"%d\n",length[i]); //упаковка длин предложений
        for(i=0;i<lengthline;++i)
            for(j=0;j<length[i];++j)
                fprintf(file,"%c",line[i][j]);  //упаковка предложений
    fclose(file);
}
 
void writeline(char line[][MAXLENGTH],int length[],int lengthline)
{int i,j;
    for(i=0;i<lengthline;++i)
            for(j=0;j<length[i];++j)
        putchar(line[i][j]);
}
 
int vvodi(int min,int max)
{
    int v;
    fflush(stdin);
    while(scanf(" %d", &v)!=1||v<min||v>max)
    {
    fflush(stdin);
    if (v<min||v>max)
        printf("Допустимый диапазон значений от %3d до %3d\nПовторите ввод\n",min,max);
    else
        printf("Некорректно введено число\nПовторите ввод\n");
    }
    return v;
}
 
double vvodd(double min,double max)
{
    double v;
    fflush(stdin);
    while(scanf(" %lf", &v)!=1||v<min||v>max)
    {
    fflush(stdin);
    if (v<min||v>max)
        printf("Допустимый диапазон значений от %.3lf до %.3lf\nПовторите ввод\n",min,max);
    else
        printf("Некорректно введено число\nПовторите ввод\n");
    }
    return v;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2017, 16:32
Ответы с готовыми решениями:

Скрыть символ новой строки при выводе строк из файла
Всем доброго времени суток, Изучая запись и чтение из файла в Пайтоне, наткнулся на такую...

Лишние символы при выводе
Считываю текст из файла: N=5, M=45; __________ while (!feof(file)) { ...

При удалении строки из файла остаются лишние символы
Вот что в файле тогда появляется вместо удаленной записи struct Meteoprognoz { char data;...

Добавляются лишние символы при выводе
Программа просто должна из строки букв и цифр (или только цифр) вывести цифры в верном порядке....

1
1782 / 1032 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
16.04.2017, 16:42 2
Цитата Сообщение от HitGirl Посмотреть сообщение
Подскажите, пожалуйста, откуда они берутся?
Попробую предположить может быть, из файла?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2017, 16:42

Лишние символы при выводе строк
При создании игрового поля для тетриса (вывод строк, в соответствии с заданным алгоритмом)...

При чтение из файла в начало строки добавляются лишние символы
getline какую-то фигню читает,причем если первую строку, то вначале добавляет &quot;яэ&quot; int main() { ...

При выводе на экран появляются лишние символы
#include &lt;iostream&gt; // ??? printf #include &lt;string.h&gt; // ??? strtok bool IsPalindrom (char...

Отображаются лишние символы при выводе массива символов
#include &lt;iostream.h&gt; #include &lt;string.h&gt; // для функций str*...


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

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

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