Форум программистов, компьютерный форум, киберфорум
Наши страницы

Чтение из файла: в чем подвох? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Замена букв в словах http://www.cyberforum.ru/cpp-beginners/thread16902.html
мучаюсь с этим, всё никак не могу понять. делала с использованием вектора. но говорит, что это неправильно, т.к. по курсу ещё не проходили. суть не в этом... вот задание: Слова текста из малых...
C++ Преобразовать строку, заменив все вхождения одного слова на другое помогите пожалуйста исправить задачку нужно преобразовать строку, заменив все слова ” государство”(в проге gos) на слово “страна”(st), подпрограмму обработки строки оформить в виде функции. ... http://www.cyberforum.ru/cpp-beginners/thread16888.html
Найти наименьшее натуральное число отсутствующее в последовательности C++
Помогите пожалуйста разобраться с решением следующей задачки. Введите последовательность из n натуральных чисел. Найти наименьшее натуральное число отсутствующее в последовательности. Алгоритм...
Указатели на массив объектов C++
здравствуйте! есть такой код: #include <cstdlib> #include <iostream> using namespace std; class samp {
C++ Нужны полные таблицы кодировок http://www.cyberforum.ru/cpp-beginners/thread16861.html
Очень нужны полные таблицы кодировок cp866_dos, win1251, koi-8, unicode, если есть у кого, дайте плиз Заранее спасибо
C++ Вхождение буквы в строку Дана строка М и символ А.Составить программу коорая подсчитает количество вхождений буквы в строку. #include<iostream.h> #include<conio.h> #include<math.h> #include<string.h> int main() {int... подробнее

Показать сообщение отдельно
Mensh
0 / 0 / 0
Регистрация: 02.11.2008
Сообщений: 10

Чтение из файла: в чем подвох? - C++

28.11.2008, 01:12. Просмотров 1390. Ответов 0
Метки (Все метки)

Народ, вот тут написал сортировку двухпутевой вставкой с разными вариантами ввода массива. Третий, как видно из кода, это ввод из файла. Програма в целом рабочая, но не могу разобраться в одной проблеме: не работает один чек, когда последний элемент стоит через энное(некоторое) кол-во enterov т.е. пустых строк. Ентера после последнего элемента нет. Причем после него может стоять ещё один элемент такого же типаю Пример:

12 23
45
65 56 98 567




123





345


Проблема всегда одна и та же: не считывается последний элемент. Помогите найти ошибку в функции чтения из файла...
Вот текст:

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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include <iostream> 
#include <time.h> 
#include <stdio.h> 
using namespace std;
void tinsert (int *a, int n) // сортировка
{ 
int *x,i,j, left=n-1, right=n-1,t; 
x=(int *) malloc((2*n-1)*sizeof(int)); 
x[n-1]=a[0]; 
for(i=1; i<n; i++) 
{ 
    t=a[i]; 
    if(t>=a[0]) 
{ 
        for(j=right; j>=0&&t<x[j]; j--) 
        x[j+1]=x[j]; 
        x[j+1]=t; 
        right++; 
} 
    else 
{ 
        for(j=left; j<=2*n-1&&t>x[j]; j++) 
        x[j-1]=x[j]; 
        x[j-1]=t; 
        left--; 
} 
} 
for(j=left; j<left+n; j++) 
a[j-left]=x[j]; 
free(x); 
} 
using namespace std;
void createfilestr(char*name)//создание текстового файла
{
    printf("Creating text file...\n");
    char*str=new char [81];
    FILE *out;
    if(!(out=fopen(name,"w")))
    {
        printf("File open is failure...\n");
        return ;
    }
    printf("Input data\n");
    printf("Press Ctrl+Z for ending\n");
    
    scanf("%s",str);
    while(!feof(stdin))
    {
        fprintf(out,"%s\n",str);
        
        scanf("%s",str);
    }
    fclose(out);
}
void readfilestr(char*name)//чтение текстового файла
{
    printf("Reading text file...\n");
    char*str=new char [81];    
    FILE *in;
    if(!(in=fopen(name,"rt")))
    {
        printf("File open is failure...\n");
        return ;
    }
    fscanf(in,"%s",str);    
    while(!feof(in))
    {
        printf("%s\n",str);
        fscanf(in,"%s",str);
    }
    fclose(in);
}
void RecMas(char*name,int*b,int n)//запись данных в файл из массива
{
    int i=0;
    FILE *out;
    if(!(out=fopen(name,"w")))
    {
        printf("File open is failure...\n");
        return ;
    }
    for(i=0;i<n;i++)
    {
        fprintf(out,"%d\n",b[i]);
    }
    fclose(out);
}
bool FvMa(char*name,int*b,int *n)//запись данных из файла в массив
{
    int i=0;
    
    FILE *in;
    if(!(in=fopen(name,"rt")))
    {
        printf("File open is failure...\n");
        return false;
    }
    fscanf(in,"%d",&b[i]);    
    if (feof(in))
    {
        cout<<"File is empty!!!\n";
        return false;
    }
    else
    while (!feof(in))
    {
        i=i+1;
        fscanf(in,"%d",&b[i]);
    }
    *n=i;
    fclose(in);
    return true;
}
 
void main()
{
    const int nmax=100;
    int B[nmax],c,n,i;    
    char*name=new char[100];
    cout<<"How do you want to input data:\n 1) Keyboord enter\n 2) Random generating\n 3) Input from the text file\n";
    cin>>c;
    if(c>1)
    {
        
        cout<<"Input name of the file: \n";
        cin>>name;
    }
    switch (c)
    {
        case 1:
                cout<<"Input number of elements"<<endl;
                cin>>n;
                cout<<"Input elements of the massiv:"<<endl; 
                for(i=0;i<n;i++)
                    cin>>B[i];
                tinsert(&B[0],n);
                cout<<"Sorted massiv:"<<endl;
                for(i=0;i<n;i++)
                cout<<B[i]<<endl;
                break;
        case 2: cout<<"Input number of elements"<<endl;
                cin>>n;
                srand(time(0));
                for(i=0;i<n;i++)
                    B[i]=rand()%100;
                cout<<"Elements of sorting massiv"<<endl;
                for(i=0;i<n;i++)
                    cout<<B[i]<<endl;
                tinsert(&B[0],n);
                cout<<"Sorted massiv:"<<endl;
                for(i=0;i<n;i++)
                cout<<B[i]<<endl;
                
                RecMas(name,&B[0],n);//запись массива в файл
                readfilestr(name);//чтение файла
                break;
        case 3:            
            bool flag;
            flag = FvMa(name,&B[0],&n);//запись из файла в массив
            if (flag)
            {
                tinsert(&B[0],n);
                cout<<"Sorted massiv:"<<endl;
                for(i=0;i<n;i++)
                cout<<B[i]<<endl;
                RecMas(name,&B[0],n);//запись массива в файл
                readfilestr(name);//чтение файла
            }
            break;
    }
    
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru