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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Mensh
0 / 0 / 0
Регистрация: 02.11.2008
Сообщений: 10
#1

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

28.11.2008, 01:12. Просмотров 1370. Ответов 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;
    }
    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2008, 01:12     Чтение из файла: в чем подвох?
Посмотрите здесь:

в чем подвох?! - C++
всем здраствуйте, вот в книжке дана, вот эта кодировка и задание, чтобы найти ошибку и исправить, я запускал и ошибку указал на m= a; но я...

Где подвох? - C++
Вот код пишет что z необьявлен! #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int zvezda(int z) { cout&lt;&lt;&quot;Enter...

Чтение входных данных размером больше чем 4096 символов - C++
Даны такие условия задачи, что входные данные введенные с клавиатуры (из файла) могут достигать 10 000 символов их надо соответственно...

Циклический сдвиг, где подвох? - C++
/* Проект 7-1 Функции циклического сдвига байта влево и вправо. */ #include&lt;iostream&gt; using namespace std; char...

чтение из файла - C++
файл текст... чтение... ... char font_name = {0}; int font_size = 0;

чтение из файла - C++
Здравствуйте, уважаемые программисты. Есть файл с записями (объектами), у каждой записи 3 параметра (переменные). Я считываю запись,...

Чтение файла - C++
Здравствуйте. Подскажите, пожалуйста, как прочитать файл с конца? Т.е. у меня записаны числа в файле 1 2 3 и т.д., а вывод 3 2 1.

Чтение из файла - C++
Тут мне на форуме код подогнали. Сижу сейчас переделываю под себя, разбираюсь. Вот в этой части, которая должна читать из файла на самом...

Чтение из файла - C++
Помогите разобраться! Вопрос такой - как читать файл. Я новичок в программировании, прошу сильно не бить. Вот что надумал: #include...

Чтение из файла C++ - C++
ввожу код из книги демидовича на тему вывода данных из файла на экран а он не рабочий, помогите пожалуйста я сделал свой код но все равно...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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