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

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

Войти
Регистрация
Восстановить пароль
 
as
36 / 22 / 3
Регистрация: 14.02.2009
Сообщений: 355
#1

Чтение из файла - C++

28.11.2009, 14:38. Просмотров 957. Ответов 10
Метки нет (Все метки)

Всем привет! Есть одна небольшая проблема.
Существует файл input.txt в котором два числа 3 и 5.
Вот код:
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
#include<iostream>
 
using namespace std;
int main()
{ int a,b; int d=0; int c;
    FILE *fp, *fw;
    fp=fopen("input.txt","r");
    if(!fp){cout<<"not file r\n"; return 1;}
 
    fw=fopen("output.txt","w");
    if(!fw){cout<<"not file w\n"; return 1;}
    int ch;
    while(!feof(fp))
    {
        ch=fgetc(fp);
       d++;
       if(d==1) continue;
       a=ch;
       if(d==2) continue;
       b=ch;
           }
       cout<<"a="<<a<<"\n"<<"b="<<b;
 
 
    fclose(fp);
    fclose(fw);
    return 0;
}
Хочу приравнять числа из файла к переменным а и b .
Но на выводе показывает:
а=-1
b=-1
Почему получается -1, подскажите пожалуйста как решить эту проблему!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2009, 14:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение из файла (C++):

Переделать в коде чтение из файла в чтение с клавиатуры - C++
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен за помощь! //файл должен начинаться со слова, между...

Чтение из файла. Повторное чтение файла - C++
Добрый день. Необходимо реализовать в программе функцию повторного чтения данных из файла, в случае некорректного ввода их в оный. Вот...

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. - C++
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt; #include &lt;cstdlib&gt; using namespace std; struct...

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется - C++
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении, просьба посмотреть его. У меня возникла...

как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла? - C++
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них запизаем, например в первый запихаем 1234 а во второй 5678 и...

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

10
mrhard
8 / 8 / 0
Регистрация: 10.11.2009
Сообщений: 36
28.11.2009, 14:51 #2
gets - взять строку из файла
Описание

Считывает литеры из потока fp в строку по указателю
str. Чтение заканчивается, когда встречается литера
`\n' (новая строка), конец файла, возникает ошибка чте-
ния или число прочитанных литер достигает n-1. Строка
завершается 0. Литера '\n' (новая строка) включается в
строку (перед 0).

делай через fscanf
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
28.11.2009, 16:58 #3
Можно и через fgetc(). Например так:
C
1
2
3
4
char ch;
ch=fgetc(fp)
if(ch-48>=0 && ch-48<=9)
a=ch-48;
Но, тут прав mrhard, через fscanf проще.
0
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
28.11.2009, 17:22 #4
Проще всего через другую штуку - перенаправить потоки ввода и вывода на файл.
Просто подписать в начале программы
C++
1
2
freopen ("input.txt","rt",stdin);
freopen ("output.txt","wt",stdout);
А в библиотеках
C++
1
#include <stdio.h>
0
as
36 / 22 / 3
Регистрация: 14.02.2009
Сообщений: 355
28.11.2009, 18:27  [ТС] #5
Мне нужно не просто перенаправить их в другой файл, а взять данный из исходного, обработать их в программе и только после этого записать результат.
Проблема состоит в том, что я не могу использовать данные исходного файла в своей программе, (например выполнять над ними арифметические операции).

Добавлено через 34 минуты
Вот код с использованием fscanf:
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
#include<iostream>
 
using namespace std;
int main()
{ int a,b;
    FILE *fp, *fw;
    fp=fopen("input.txt","r");
    if(!fp){cout<<"not file r\n"; return 1;}
 
    fw=fopen("output.txt","w");
    if(!fw){cout<<"not file w\n"; return 1;}
    int ch;
    while(!feof(fp))
    {
        fscanf(fp,"%d",&ch);
a=ch;
b=ch;
cout<<"a="<<a<<"\n"<<"b="<<b<<"\n";
  }
 
    fclose(fp);
    fclose(fw);
    return 0;
}
Но на выводе получается:
a=3
b=3
a=5
b=5
a=5
b=5
Как сделать что б вывело а=3 b=5 ???
0
Darky
Быдлокодер
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
28.11.2009, 18:27 #6
as, Вы читаете точно то, что я Вам написал?
В чем проблема то?
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <iostream>
using namespace std;
void main()
{
freopen ("input.txt","rt",stdin);
freopen ("output.txt","wt",stdout);
cin>>a>>b;
cout<<a+b;
}
И выведется в отдельный файл output.txt
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
28.11.2009, 18:49 #7
as,
У Вас проблема вот в этой части кода:
C++
1
2
3
4
5
6
7
    while(!feof(fp))
    {
        fscanf(fp,"%d",&ch);
a=ch;
b=ch;
cout<<"a="<<a<<"\n"<<"b="<<b<<"\n";
  }
Нужно этот кусок кода просто заменить на:
C++
1
2
3
4
5
       fscanf(fp,"%d",&ch);
a=ch;
fscanf(fp,"%d",&ch);
b=ch;
cout<<"a="<<a<<"\n"<<"b="<<b<<"\n";
Это будет работать для условий которые Вы написали.
1
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
28.11.2009, 19:38 #8
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Нужно этот кусок кода просто заменить на:
C++
1
2
3
4
5
fscanf(fp,"%d",&ch);
a=ch;
fscanf(fp,"%d",&ch);
b=ch;
cout<<"a="<<a<<"\n"<<"b="<<b<<"\n";
Я бы даже сказал
C
1
2
fscanf(fp, "%d", &a);
fscanf(fp, "%d", &b);


А вообще даже раздражжает немного, если честно, когда половина на С, половина на С++
Где собственно
C++
1
2
3
4
5
6
7
8
9
#include <fstream>
...
ifstream fin("input.txt");
...
ofstream fout("output.txt");
...
fin >> a >> b;
fout << ( a + b ) << endl;
...
?
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
28.11.2009, 19:42 #9
easybudda, согласен на 100%
0
as
36 / 22 / 3
Регистрация: 14.02.2009
Сообщений: 355
28.11.2009, 21:10  [ТС] #10
Всем большое спасибо за ответы! Разобрался наконец.
Только есть еще один вопрос.
Пишу программу с иерархией классов, где создается несколько объектов.
Например,создаю объект Item Myobject("Т90", 40000,60);
Как сделать что бы параметры объекта не писать в коде, а доставать их из файла input.txt ?????
Можно ли такое делать?
0
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
28.11.2009, 21:32 #11
как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <fstream>
#include <string>
...
string p1;
long p2;
int p3;
Item *my_obj;
ifstream fin("input.txt");
...
fin >> p1 >> p2 >> p3;
my_obj = new Item(p1, p2, p3);
...
// do something
...
delete my_obj;
...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2009, 21:32
Привет! Вот еще темы с ответами:

Чтение из файла - C++
У.у..у.. чёрт побери...что - то я запарился на эти сишные функции мануалы читать.....всё забыл... Может кто напомнит строчку кода, как...

Чтение из файла - C++
Народ напишите любую программу по чтению из файла, но что бы использовалось fopen_s, fscanf_s, код должен быть написан на C++

Чтение из файла - C++
Есть текстовый файл, с n строк. Нужно записать содержимое каждой строки в массив char table. Длина каждой строки известна и одинакова, так...

Чтение из файла - C++
Здравствуйте, прошу помощи... Я только начала изучение, поэтому еще слишком плохо разбираюсь даже в элементарных вещах, прошу не судить...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
28.11.2009, 21:32
Ответ Создать тему
Опции темы

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