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

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

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

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

28.11.2009, 14:38. Просмотров 939. Ответов 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, подскажите пожалуйста как решить эту проблему!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2009, 14:38     Чтение из файла
Посмотрите здесь:

Чтение файла C++
C++ Чтение из файла
C++ Чтение из файла. СИ++
C++ Чтение из файла
C++ чтение из файла
Чтение из файла C++
чтение из файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mrhard
8 / 8 / 0
Регистрация: 10.11.2009
Сообщений: 36
28.11.2009, 14:51     Чтение из файла #2
gets - взять строку из файла
Описание

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

делай через fscanf
valeriikozlov
Эксперт C++
4663 / 2489 / 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 проще.
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>
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 ???
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
valeriikozlov
Эксперт C++
4663 / 2489 / 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";
Это будет работать для условий которые Вы написали.
easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,493
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;
...
?
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
28.11.2009, 19:42     Чтение из файла #9
easybudda, согласен на 100%
as
36 / 22 / 3
Регистрация: 14.02.2009
Сообщений: 355
28.11.2009, 21:10  [ТС]     Чтение из файла #10
Всем большое спасибо за ответы! Разобрался наконец.
Только есть еще один вопрос.
Пишу программу с иерархией классов, где создается несколько объектов.
Например,создаю объект Item Myobject("Т90", 40000,60);
Как сделать что бы параметры объекта не писать в коде, а доставать их из файла input.txt ?????
Можно ли такое делать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2009, 21:32     Чтение из файла
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,493
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;
...
Yandex
Объявления
28.11.2009, 21:32     Чтение из файла
Ответ Создать тему
Опции темы

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