2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Потоки в Си++
Сообщение03.12.2014, 19:46 


03/11/14
12
Здравствуйте. Задача такова:
"Написать программу, которая будет считывать содержимое текстового файла. При этом должна быть возможность во время считывания данных из файла по требованию (т.е. при введении с консоли заранее определенного символа) отобразить количество считанных из файла символов. Также должна быть возможность приостановки и прерывания выполнения программы."
Есть 2 вопроса.
1. Как подключить к коду файл?
2. Как написать эту прогу с помощью потоков?

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 20:53 
Заслуженный участник


02/08/11
7003
newfag в сообщении #939778 писал(а):
Как подключить к коду файл?
А что, тот кто задал задачу вам не рассказал об этом? Ну воспользуйтесь ifstream.

-- 03.12.2014, 21:54 --

newfag в сообщении #939778 писал(а):
Как написать эту прогу с помощью потоков?
А в чём конкретная проблема?

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 21:01 


03/11/14
12
Не рассказал. Сам разбираюсь.
При таком коде:
#include <stdarg.h>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "RUS");
int n = 0;
float a;
fstream F;
F.open("C:\\Documents\\textdocument.txt");
if (F)
{
while (!F.eof())
{
F >> a;
cout << a << "\t";
n++;
}
F.close();
cout << "n=" << n << endl;
}
else cout << " Файл не существует" << endl;
system("pause");
return 0;
getchar();
}
ошибок не выдает, но в окне до бесконечности появляется цифра 2.258.


Конкретная проблема в том, что я не понимаю потоков в принципе. И как применить их в условиях данной задачи, соответственно, тоже.

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 21:10 
Заслуженный участник


27/04/09
28128
Тут нужны потоки в смысле thread, а будут ли stream в коде — безразлично. Очевидно, минимумом будет два потока — один основной, с консолью, и другой, читающий файл.

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 21:11 
Заслуженный участник


04/05/09
4587
Вы проверяете только eof флаг, а ввод может не сработать по другим причинам, например, неправильный формат данных.
Вместо
Код:
while ( !F.eof() )
напишите
Код:
while ( !F )

Это провека всех ошибок.

Кроме того, проверять надо после ввода перед использованием переменных с результатом, т.к. именно этот ввод мог не закончиться. В вашем случае сразу после
Код:
F >> a;
надо проверить результат.
Можно и ввод, и проверку сделать в одну строчку:
Код:
if ( !(F >> a) ) error("Failed to read a");


-- Ср дек 03, 2014 13:12:44 --

arseniiv в сообщении #939830 писал(а):
Тут нужны потоки в смысле thread, а будут ли stream в коде — безразлично. Очевидно, минимумом будет два потока — один основной, с консолью, и другой, читающий файл.
Это потом, сначала надо с файлами разобраться.

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 21:26 


03/11/14
12
Написал While(!F) - теперь в окошке выдает только значение n равное 0
Может быть дело в том, что в моем документе содержатся не только символы типа int, которым я описываю n?

А вот с дальнейшей проверкой проблема: слово error мой Visual не знает

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 21:34 
Заслуженный участник


04/05/09
4587
newfag в сообщении #939842 писал(а):
Написал While(!F) - теперь в окошке выдает только значение n равное 0
Может быть дело в том, что в моем документе содержатся не только символы типа int, которым я описываю n?
Что значит "в моем документе содержатся не только символы типа int"?
В документе, который вы читаете командой "F>>a" должно быть текстовое представление читаемой переменной. А символы имеют тип char.

newfag в сообщении #939842 писал(а):
А вот с дальнейшей проверкой проблема: слово error мой Visual не знает
Это я так обозначил обработку ошибки чтения. Вставьте свой вариант - сообшение какое-нибудь, и выход из цикла или даже программы.

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 21:39 


03/11/14
12
"В документе, который вы читаете командой "F>>a" должно быть текстовое представление читаемой переменной. А символы имеют тип char."

Но я то описал их в программе как int :D
И все равно, при смене типа данных, равенство n нулю сменилось на равенство a.

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 22:11 
Заслуженный участник


04/05/09
4587
newfag в сообщении #939852 писал(а):
Но я то описал их в программе как int :D
Кого "их"?
istream через оператор >> читает из потока текстовое представление числа a. Неважно, объявлено оно int, float или double.

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 22:13 


03/11/14
12
Серьезно!?
Ну тогда вообще не могу понять, в чем проблема. Не считает количество символов и все тут.

P.S.
Я очень слаб в программировании, извините за тупость в элементарных вещах:)

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 22:39 
Заслуженный участник


27/04/09
28128

(Оффтоп)

venco в сообщении #939831 писал(а):
Это потом, сначала надо с файлами разобраться.
Согласен. А я мельком глянул, что ничего thread’ного нет, и дальше не смотрел. :roll:

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 22:44 
Заслуженный участник


02/08/11
7003
newfag в сообщении #939891 писал(а):
Ну тогда вообще не могу понять, в чем проблема. Не считает количество символов и все тут.
Скиньте куда-нибудь свой файл на посмотреть. Например, сюда: http://pastebin.ubuntu.com/

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 22:53 
Заслуженный участник
Аватара пользователя


19/12/10
1546
newfag в сообщении #939821 писал(а):
ошибок не выдает, но в окне до бесконечности появляется цифра 2.258.

Скомпилировал вашу программу почти "как есть". Только закомментировал несколько явно лишних строк:

код: [ скачать ] [ спрятать ]
Используется синтаксис C++
//#include <stdarg.h>
#include <iostream>
#include <fstream>
//#include <iomanip>
//#include <stdlib.h>

using namespace std;

int main(){
        setlocale(LC_ALL, "RUS");
        int n = 0;
        float a;
        fstream F;
        F.open("textdocument.txt");
        if(F){
                while(!F.eof()){
                        F >> a;
                        cout << a << "\t";
                        n++;
                }
                F.close();
                cout << "n=" << n << endl;
        }
        else cout << " Файл не существует" << endl;
        system("pause");
        return 0;
        //getchar();
}

Вот содержание текстового файла:
Код:
3.1415926 2.718281828

А вот вывод программы:
Вложение:
Screenshot_6.png
Screenshot_6.png [ 15.72 Кб | Просмотров: 0 ]

Так в чём проблема?

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 22:58 
Заслуженный участник


04/05/09
4587
newfag в сообщении #939891 писал(а):
Серьезно!?
Ну тогда вообще не могу понять, в чем проблема.
Например, у вас в файле написано:
Код:
"12"
Тогда operator>> наткнётся на первую кавычку, которая не соответствует требуемому формату числа, отметит ошибку и вернётся, ничего не прочитав.
Это лишь один из вариантов.

newfag в сообщении #939891 писал(а):
Не считает количество символов и все тут.
И вообще, в задании требуется читать именно символы. Зачем вы читаете переменную типа float?
Вам надо пользоваться методами неформатированного ввода: istream::read() или istream::get(). Читайте документацию библиотеки C++.

newfag в сообщении #939891 писал(а):
Я очень слаб в программировании, извините за тупость в элементарных вещах:)
В таком случае вы заслуживаете плохой оценки или незачёта. К концу семестра вы уже должны знать азы.

 Профиль  
                  
 
 Re: Потоки в Си++
Сообщение03.12.2014, 23:01 
Заслуженный участник


02/08/11
7003
venco в сообщении #939948 писал(а):
Читайте документацию библиотеки C++.
Рекомендую также учебник Т. Павловской "C/C++. Программирование на языке высокого уровня". Он конечно устарел, но для подобных случаев вполне годится.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group