Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Замена букв в словах http://www.cyberforum.ru/cpp-beginners/thread16902.html
мучаюсь с этим, всё никак не могу понять. делала с использованием вектора. но говорит, что это неправильно, т.к. по курсу ещё не проходили. суть не в этом... вот задание: Слова текста из малых латинских букв записаны не менее чем через один пробел; текст оканчивается точкой. БЕЗ ИСПОЛЬЗОВАНИЯ конструкции STRING: а) написать программу ввода такого текста с клавиатуры; б) каждую букву,...
C++ Преобразовать строку, заменив все вхождения одного слова на другое помогите пожалуйста исправить задачку нужно преобразовать строку, заменив все слова ” государство”(в проге gos) на слово “страна”(st), подпрограмму обработки строки оформить в виде функции. Получается меняет 1-й символ: gos gos. st = sos gos. st #include <iostream> #include <cstring> using namespace std; void zamena(char *str) { char *st1 = "gos"; char *st2 = "st"; ... http://www.cyberforum.ru/cpp-beginners/thread16888.html
Найти наименьшее натуральное число отсутствующее в последовательности C++
Помогите пожалуйста разобраться с решением следующей задачки. Введите последовательность из n натуральных чисел. Найти наименьшее натуральное число отсутствующее в последовательности. Алгоритм следующий: Очевидно, что при вводе n натуральных чисел по крайней мере одно число из интервала отсутствует. Поэтому идея решения состоит в том, что отводится массив из 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 i,count; char str ; char ch; подробнее

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

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

28.11.2008, 01:12. Просмотров 1366. Ответов 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;
    }
    
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru