2 / 2 / 0
Регистрация: 29.08.2010
Сообщений: 51
1

cin чтение из файла C++

10.10.2010, 00:03. Показов 26113. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,который день ищу не могу понять как читать из файла с помошью cin
Допустим есть 2 файла input.txt и output.txt.В файле input.txt лежат 2 числа разделённых пробелом например 6 и 3,как с помошью cin прочитать их и каждое число присвоить переменной например a и b, а потом записать в output.txt.
Интересует именно cin!!!Никаких fopen,scanf и ifstream !!! Ах да, язык c++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2010, 00:03
Ответы с готовыми решениями:

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже использую вещи, которые...

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная "защита от дурака" на ввод....

Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear()
Такая проблема: сдаю в вуза лабораторные по программированию, писал все сам, до этого c++ не...

Чтение символов из cin в буфер в цикле
Привет! Нужно считать строки из консоли, но что-то идёт не так. while (true) { ...

19
364 / 365 / 167
Регистрация: 11.06.2010
Сообщений: 703
10.10.2010, 00:09 2
cin-ом никак не сможете считать
C++
1
2
3
4
5
6
ifstream file("input.txt");
file>>a>>b;
file.close();
ofstream file("output.txt");
file<<a<<b;
file.close();
0
В астрале
Эксперт С++
8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.10.2010, 00:13 3
-comrade-, Ошибаетесь товарисч. Сначала читает cin-ом из файла. Потом возвращаем стандартный cin и читаем с клавиатуры.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <fstream>
#include <string>
#include <iostream>
 
int main()
{
    std::streambuf* backup;
    std::string Str;
    backup=std::cin.rdbuf();
    std::ifstream ifs("Test.txt");
    std::cin.rdbuf(ifs.rdbuf());
    std::getline(std::cin, Str);
    std::cout<<Str<<'\n';
    std::cin.rdbuf(backup);
    std::cin>>Str;
    std::cout<<Str<<'\n';
    return 0;
}
Конкретно по данному.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <fstream>
 
int main()
{
     std::ifstream ifs("input.txt");
     std::cin.rdbuf(ifs.rdbuf());
     int a, b;
     std::cin>>a>>b;
     ifs.close();
     std::ofstream ofs("output.txt");
     std::cout.rdbuf(ofs.rdbuf());
     std::cout<<a<<' '<<b;
     ofs.close();
     return 0;
}
1
2 / 2 / 0
Регистрация: 29.08.2010
Сообщений: 51
10.10.2010, 00:18  [ТС] 4
Цитата Сообщение от -comrade- Посмотреть сообщение
ifstream file("input.txt"); file>>a>>b; file.close(); ofstream file("output.txt"); file<<a<<b; file.close();
не работает у вас по-моему переприсвоение переменных тоесть вы сначала присваеваете a потом b и потом снова a и в output.txt ничего не сохраняется из за этого,еще может быть потому что у меня там цифры разеделены пробелом короче не работает



Цитата Сообщение от -comrade- Посмотреть сообщение
cin-ом никак не сможете считать
я думаю ,что можно давно просто делал

Добавлено через 2 минуты
Цитата Сообщение от Lavroff Посмотреть сообщение
#include <fstream> #include <string> #include <iostream> int main() { std::streambuf* backup; std::string Str; backup=std::cin.rdbuf(); std::ifstream ifs("Test.txt"); std::cin.rdbuf(ifs.rdbuf()); std::getline(std::cin, Str); std::cout<<Str<<'\n'; std::cin.rdbuf(backup); std::cin>>Str; std::cout<<Str<<'\n'; return 0; }
не совсем понял т.к. намудренно программа должна всего лишь с помощью cin считать 2 числа из файла разделённых пробелом и присвоить их 2 переменным а потом записать в файл output.txt ,думаю можно как то попроще?

Добавлено через 56 секунд
Цитата Сообщение от Lavroff Посмотреть сообщение
и читаем с клавиатуры.
читать с клавы там не надо)
0
В астрале
Эксперт С++
8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.10.2010, 00:20 5
bol2909, Гм. Ну rdbuf просто поток переводит на файл. Можно через freopen. Но это как бэ Си.
1
2 / 2 / 0
Регистрация: 29.08.2010
Сообщений: 51
10.10.2010, 00:21  [ТС] 6
Цитата Сообщение от Lavroff Посмотреть сообщение
#include <iostream> #include <fstream> int main() { std::ifstream ifs("input.txt"); std::cin.rdbuf(ifs.rdbuf()); int a, b; std::cin>>a>>b; ifs.close(); std::ofstream ofs("output.txt"); std::cout.rdbuf(ofs.rdbuf()); std::cout<<a<<' '<<b; return 0; }
спасибо попробую

Добавлено через 37 секунд
rdbuf не очень понял можете объяснить что это такое по конкретнее)
0
В астрале
Эксперт С++
8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.10.2010, 00:22 7
bol2909, rdbuf
1
2 / 2 / 0
Регистрация: 29.08.2010
Сообщений: 51
10.10.2010, 00:23  [ТС] 8
а на русском есть?)
кстати я попробовал работает спасибо
0
364 / 365 / 167
Регистрация: 11.06.2010
Сообщений: 703
10.10.2010, 00:27 9
bol2909, вот ваша задача:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
 
using namespace std; 
 
int main()
{
    int a,b;
    ifstream file1("d:\\input.txt");
    file1>>a>>b;
    file1.close();
    ofstream file2("d:\\output.txt");
    file2<<a<<" "<<b;
    file2.close();
    return 1;
}
1
В астрале
Эксперт С++
8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.10.2010, 00:29 10
bol2909, На русском нормальной инфы нету. Вообщем, если вкратце и если я правильно понял, то rdbuf связывает поток с тем, что указано в параметрах. Допустим тут:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <fstream>
 
int main()
{
     std::ifstream ifs("input.txt");//Файл
     std::cin.rdbuf(ifs.rdbuf());//Перенаправили стандартный ввод на ввод из файла
     int a, b;
     std::cin>>a>>b;//Считали из файла значения, положили в две переменные
     ifs.close();
     std::ofstream ofs("output.txt");//Открыли второй файл
     std::cout.rdbuf(ofs.rdbuf());//Перенаправили стандартный вывод на вывод в файл
     std::cout<<a<<' '<<b;//Вывели
     ofs.close();
     return 0;
}
Добавлено через 53 секунды
-comrade-, Вам как бэ не намекает?

Цитата Сообщение от bol2909 Посмотреть сообщение
Интересует именно cin!!!Никаких fopen,scanf и ifstream !!!
1
2 / 2 / 0
Регистрация: 29.08.2010
Сообщений: 51
10.10.2010, 00:31  [ТС] 11
Цитата Сообщение от -comrade- Посмотреть сообщение
#include <fstream> using namespace std; int main() { int a,b; ifstream file1("d:\\input.txt"); file1>>a>>b; file1.close(); ofstream file2("d:\\output.txt"); file2<<a<<" "<<b; file2.close(); return 1; }
это более понятно спасибо))

Добавлено через 1 минуту
Цитата Сообщение от Lavroff Посмотреть сообщение
-comrade-, Вам как бэ не намекает?
Цитата Сообщение от bol2909 Посмотреть сообщение
Интересует именно cin!!!Никаких fopen,scanf и ifstream !!!
да ладно просто,хотелось именно cin, но если легче с другими то можно и с ними всем спасибо)))
0
Эксперт С++
5038 / 2617 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
10.10.2010, 07:27 12
Для разнообразия:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
 
int main()
{
    std::string str;
    std::cin >> str;
    
    std::cout << "Следующая строка прочитана из файла: " << str << std::endl;
}
Лог консоли:
Код
./a.out < file.txt
Следующая строка прочитана из файла: читаемая_строка_из_файла
1
2 / 2 / 0
Регистрация: 29.08.2010
Сообщений: 51
10.10.2010, 12:02  [ТС] 13
./a.out < file.txt дак у меня вроде не linux,я на visual studio 2010 работаю

Добавлено через 34 секунды
Цитата Сообщение от fasked Посмотреть сообщение
./a.out < file.txt
Дак у меня вроде не llinux я на visual studio работаю)
0
Эксперт С++
5038 / 2617 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
10.10.2010, 12:23 14
Цитата Сообщение от bol2909 Посмотреть сообщение
Дак у меня вроде не llinux я на visual studio работаю
из командной строки можно абсолютно так же запускать и *.exe файлы, если я не ошибаюсь.
Код
myprogramm.exe < file.txt
1
2 / 2 / 0
Регистрация: 29.08.2010
Сообщений: 51
10.10.2010, 12:27  [ТС] 15
а понял то есть мне надо при включении программы самому прописать путь к файлу да?
если так то не очень подходит нужно чтобы в коде уже был записан путь
0
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
05.07.2013, 02:46 16
Читать из файла с помощью CIN конкретно можно так:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
# include <iostream>
# include <cstdlib>
# include <cstdio>
using namespace std;
 
main()
{
   string a;
   freopen ("C:\\input.txt", "r", stdout);  //переключаем поток на ввод из файла
   cin >> a;                                //вводим из файла
 
   fclose (stdout);
}
0
39 / 39 / 24
Регистрация: 13.05.2010
Сообщений: 282
Записей в блоге: 1
05.07.2013, 09:06 17
Цитата Сообщение от xlxndr Посмотреть сообщение
Читать из файла с помощью CIN конкретно можно так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
# include <iostream>
# include <cstdlib>
# include <cstdio>
using namespace std;
 
main()
{
   string a;
   freopen ("C:\\input.txt", "r", stdout);  //переключаем поток на ввод из файла
   cin >> a;                                //вводим из файла
 
   fclose (stdout);
}
stdout Это же запись

Вот так надо делать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int main()
{
   fstream("input.txt", "r", stdin);
   fstream("output.txt", "w", stdout);
 
   int a, b;
   cin >> a >> b;
   cout << a + b;
 
   return 0;
}
0
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
05.07.2013, 12:59 18
Да, там stdin нужно было написать...

C
1
2
3
4
5
6
7
8
9
10
11
12
13
# include <iostream>
# include <cstdlib>
# include <cstdio>
using namespace std;
 
main()
{
   string a;
   freopen("C:\\input.txt", "r", stdin);  //переключаем поток на ввод из файла
   cin >> a;                              //вводим из файла
 
   fclose (stdin);
}
а fstream - это класс, а не функция... и с помощью такого способа используется не CIN И COUT, а имя объекта fstream.

Добавлено через 4 минуты
Если использовать объект fstream, тогда так:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
 
int main()
{
    char buff[50];                                   //декларируем массив для промежуточного хранения текста
 
    ofstream outfile("myfile.txt");                  //создаем объект класса ofstream и связываем его с файлом mytext.txt
    outfile << "Этот текст будет в файле" << endl;   //записываем текст в файл
    outfile.close();                                 //отделяем файл от объекта outfile (закрываем файл)
 
    ifstream infile("myfile.txt");                   //создаем объект класса ifstream и связываем его с файлом mytext.txt
 
    infile.getline(buff,40);                         //считываем всю строку с ТОГО МЕСТА, где мы остановились
    cout << buff << endl;                            //выводим эту строку
    infile.close();                                  //закрываем файл
}
0
1404 / 646 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
05.07.2013, 13:03 19
Уважаемые некропостеры, тут требовалось организовать ввода cin'ом без fopen, scanf и ifstream.
0
39 / 39 / 24
Регистрация: 13.05.2010
Сообщений: 282
Записей в блоге: 1
05.07.2013, 13:35 20
xlxndr, точно, попутал с freopen
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2013, 13:35
Помогаю со студенческими работами здесь

Чтение последовательности чисел из cin в массив
Добрый вечер. Есть код: vector&lt;unsigned int&gt; block; while (!bGood) { counter=0;...

Cin, чтение с конца полученного потока
Происходит ввод с клавиатуры последовательности чисел разделенных пробелами, нужно извлечь из этого...

cin из файла - как?
именно CIN! Никаких там fstream'ов и fopen... То есть как сделать так, чтобы программа работала:...

Метод getline(cin, m) не срабатывает без cin.ignore() / Ревью кода
Почему в моем случае getline(cin, m) не срабатывает без cin.ignore() ? Если по коду есть...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru