Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
3 / 3 / 1
Регистрация: 20.09.2012
Сообщений: 57
1

Добавить числа из файла

03.05.2013, 13:59. Просмотров 471. Ответов 9
Метки нет (Все метки)

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

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
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <fstream>
using namespace std;
int main ()
{
ofstream fout ;
fout.open("test.txt");
if(!fout)
{
cout<<"cant open file\n";
return 1;}
int a[10];
for (int i = 0; i < 10; i++)     {
a[i] = rand ()%10;
fout<<a[i];       }
fout.close ();
ifstream fin("test.txt");
if(!fin) {
cout<<"Cant open file\n";
return 1;
}
char ch[10];
 
 
fin.unsetf(ios::skipws);
int c=0,d[10]    ;
 
for(int k = 0; k <10; k++)
{
fin>>ch[k];
 
c+=ch[k];
 
if(fin.eof())
 break;
 cout<<ch[k]<<' ';}
  cout<<endl<<c;
 
   getch();
return 0;    }
Олсо, считать нужно обязательно из файла, то есть добавить наш массив а - нельзя.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2013, 13:59
Ответы с готовыми решениями:

Добавить в конец каждой строки текстового файла изображение соответствующего числа из файла целых чисел
Дан текстовый файл и файл целых чисел. Добавить в конец каждой строки текстового файла изображение...

Преобразование двоичного числа в десятичное: добавить ввод и вывод из файла
Вот задача на преобразование двоичного числа в десятичное. Помогите исправить, чтоб исходные данные...

В файл записать целые числа. В конец файла добавить сумму все чисел
В файл записать целые числа. В конец файла добавить сумму все чисел.

Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла
3)Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.

9
276 / 275 / 83
Регистрация: 03.02.2013
Сообщений: 792
03.05.2013, 14:17 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
#include <iostream>
#include <fstream>
#include <cstdlib>
 
using namespace std;
 
 
int main()
{
    srand (time(NULL));
    
    ofstream fout("test.txt");
    for(size_t i=0; i!=10; ++i) fout<<(rand ()%10)<<endl;
    fout.close();
    
    ifstream fin("test.txt");
    long sum=0,tmp;
    fin>>tmp;
    while (fin.good()) 
    {
          sum += tmp; 
          fin>>tmp;
    }
    cout << sum << endl;
    system("pause");
    return 0;
};
Добавлено через 2 минуты
а с кодами дело так - вам надо либо в переменную int читать либо преобразовывать к целым числам char либо работать с бинарным файлом
1
3 / 3 / 1
Регистрация: 20.09.2012
Сообщений: 57
03.05.2013, 14:27  [ТС] 3
abit, спасибо конечно, всё работает, но очень много нюансов я не понял. + много чего из написанного мне еще неизвестно. Могли бы вы подсказать что не так у меня, как исправить ?
0
276 / 275 / 83
Регистрация: 03.02.2013
Сообщений: 792
03.05.2013, 14:47 4
я вам предложил аж три способа как исправить)
по нормальному - это вообще всё переписать

если нужен костыль именно на это, попробуйте так считать сумму
C++
1
c+=ch[k]-(int)'0';
0
3 / 3 / 1
Регистрация: 20.09.2012
Сообщений: 57
03.05.2013, 15:00  [ТС] 5
Хорошо, спасибо, но тогда такой вопрос: что это такое ? Можно ли это переписать более понятным образом ?

Цитата Сообщение от abit Посмотреть сообщение
while (fin.good())
* * {
* * * * * sum += tmp;
* * * * * fin>>tmp;
* * }
0
276 / 275 / 83
Регистрация: 03.02.2013
Сообщений: 792
03.05.2013, 15:07 6
while (fin.good()) = while (!fin.eof())

sum += tmp; - в переменной sum аккумулируется последнее прочитанное значение

fin>>tmp - из входного файлового потока читается следующее значение

по сути у вас аналогичные инструкции есть в вашем коде, не задавались вопросом что они значат?

т.е.
C++
1
2
if(fin.eof())
 break;
тождественно тому, что я вынес проверку в инвариант цикла а две оставшиеся вот:
C++
1
2
3
fin>>ch[k];
 
c+=ch[k]-(int)'0';
1
3 / 3 / 1
Регистрация: 20.09.2012
Сообщений: 57
03.05.2013, 15:17  [ТС] 7
abit, неправильно цитату написал, интересова только while
Спасибо еще раз
0
3 / 3 / 1
Регистрация: 20.09.2012
Сообщений: 57
03.05.2013, 15:38  [ТС] 8
abit, Слушай, ошибку какую-то нашел. Вывел на экран переменную tmp. И вот что вышло:
0
Миниатюры
Добавить числа из файла  
276 / 275 / 83
Регистрация: 03.02.2013
Сообщений: 792
03.05.2013, 15:43 9
вы как-то не так вывели, я сложил числа из вашего блокнота - получил 39 как и в программе, какой конструкцией вы водили?

если говорить о моём коде вывод tmp должен выглядеть как-то так:
C++
1
2
3
4
5
6
7
    while (fin.good()) 
    {
          cout<<tmp<<" ";
          sum += tmp; 
          fin>>tmp;
    }
    cout<<endl;
1
3 / 3 / 1
Регистрация: 20.09.2012
Сообщений: 57
03.05.2013, 15:54  [ТС] 10
abit, Всё, извините, что отнял у вас так много времени. Всё прекрасно работает, еще раз спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2013, 15:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла
Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.

Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла.
Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла.

Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла
Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла

Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла
Даны два текстовых файла. Добавить в начало первого файла содержимое второго файла.


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

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

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