Jump to content

Несколько вопросов по Visual C++ 2008


Recommended Posts

Вобщем при изучении возникли некоторые вопросы.

Допустим не совсем понятно почему не работает следующий код.

Я в обработчике события button1_Click пишу следующее

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 	 {float e,e1; int k=0; e=1.0; do { e=e/2.0; e1=e+1.0; k++; } while (e1>1.0); Form1::label3->Text=FloatToStF(e1,ffGeneral,7,2); Form1::label4->Text=FloatToStF(k,ffGeneral,7,2);;	 }};

На что получаю целый ворох ошибок

Ошибка 8 error C3861: FloatToStF: идентификатор не найден

Ошибка 3 error C2676: бинарный '+': 'System::EventArgs ^' не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору (это вобще что такое? плюс не воспринимает.)

Ошибка 1 error C2676: бинарный '/': 'System::EventArgs ^' не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору (и деление тоже)

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

Делаю так

String^ fileName = "1.txt";StreamReader^ din = File::OpenText(fileName);String^ str;  int count = 0;  while ((str = din->ReadLine()) != nullptr)   {	 count++;	 Zam::textBox1->Text=str;  }

Работает. Но читает и выводит только последнюю строку. а надо весь текстовый фаил.

Потом тудаже нужно записать. Тут вобще трабл. Пробывал по разному записывать. Ничего не получилось.

=(

Link to comment
Share on other sites

DoctorG:

Компилятор же написал, что функция FloatToStF ему неизвестна. Скорее всего, нужна была функция FloatToStrF.

Относительно строки - из файла читаются строки и помещаются в одну и ту же переменную, каждый раз замещая предыдущую строку. В итоге в переменной будет последняя считанная строка. Надо не полностью заменять каждый раз строку в Text, а добавлять к старому содержимому Text очередную считанную из файла строку. Или, эффективнее, сначала собрать все строки из файла в одну и потом уже ее вывести.

Edited by Тролль
Link to comment
Share on other sites

Вобщем все мои проблемы решились вдумчивым чтением справки =)

-----

Еще вопрос такой. Я когда сохраняю фаил. Хочу чтобы к каждой строке цеплялась текущая системная дата. Как ее вытащить?

Link to comment
Share on other sites

И еще. есть некая переменная int I;

Как привести ее к String ^p; ?

Чтобы была возможность информацию из нее вставить в textbox;

C переводом форматов справился. Осталось дата.

Edited by DoctorG
Link to comment
Share on other sites

DoctorG:

C переводом форматов справился. Осталось дата.
#include <time.h>

...

char s[12]; cout<<_strdate(s);

Дата в строке будет в несколько непривычном формате (американском), надеюсь, переставить части строки местами будет нетрудно.

Lion HC:

что значит симовол ^
Операция побитового исключающего "ИЛИ". Каким образом ее использует в своей программеDoctorG, знает только он сам ;).
Link to comment
Share on other sites

Еще один вопрос.

допустим есть некое поле, типа textBox

мне нужно чтобы в него была возможность вводить лишь цифры, но не буквы.

я так понимаю это нужно сделать с помощью события

KeyPress

а что писать в обработчике события?

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Да ни в каком событии... Ввели строку - прежде чем передать ее дальше, прсто в тексте программы проверь, нет ли в ней букв и, если есть, выдай на экран "Введите снова: допустимы только цифры".

Если уж хочется контролировать именно ввод, то проверка во время ввода описана, например, тут (ближе к концу страницы), правда, на C#, но это, видимо, нетрудно изменить и для C++.

Link to comment
Share on other sites

Скажите пожалуйста, что значит симовол ^

В Борланде я такого еще не встречал :g:

Не знаю почему, но в .net таким образом обозначаются указатели.

Link to comment
Share on other sites

Так обозначались указатели в Pascal, потом в Delphi. В C++ мне такого пока не попадалось, хотя не исключено, конечно, что такое уже существует и просто до меня не дошло. Borland, активно продвигавшая Delphi и даже свой C++ Builder строившая с большой оглядкой на Delphi, вполне могла бы такое учудить. Но Microsoft... :) хотя чем черт не шутит :(

Link to comment
Share on other sites

  • 3 months later...

Microsoft не отказалась от *.

Значение в звездочки прежнее. Но при програмировании под .NET, появилась необходимость ввести новий спец.символ...

...обратите внимание на необходимость использования ключевого слова gcnew вместо new при создании объекта .NET, а также на то, что gcnew возвращает дескриптор (^), а не указатель (*):

StreamWriter^ sw = gcnew StreamWriter(fileName);

П.С.: ето я вчера поставил себе русскую версию Microsoft Visual Studio Team System 2008 Architecture Edition с русской справкой. Пока очень доволен :)

Link to comment
Share on other sites

  • 3 weeks later...

Есть вопрос. Пишу программу, которая, грубо говоря, считывает байты из одного файла и записывает их в новый (т.е. сначала считывается байт из файла, затем сразу же идёт его запись в новый файл и так далее). Однако, когда размер исходного файла достаточно велик, программа при выполнении операций перестаёт отвечать, она начинает загружать процессор на 50-60%. Соответственно, различные индикаторы прогресса в программе тоже застывают на месте, всё окно программы как бы заморожено, хотя сам процесс считывания/записи идёт (это заметно из того, что размер нового файла с каждым разом увеличивается). Как только процесс чтения/записи завершается, программа снова начинает отвечать и процессор перестаёт быть загруженным. Почему так происходит?

P.S: Должен заметить, что это было не только в VB.NET, но и раньше, когда писал подобные приложения в VB 6.0.

Edited by Shadow TH
Link to comment
Share on other sites

Вы считываете/записываете каждый раз только по 1 байту? Какой примерно размер файла?

Ну, допустим, файл размером 10 МБ. Я открываю файл для чтения и ещё один файл для записи. Затем в цикле указываю нижний предел = 1, и верхний предел в зависимости от того, сколько байтов мне нужно сохранить в новом файле. Уже в самом цикле находятся операторы чтения/записи.

Edited by Shadow TH
Link to comment
Share on other sites

В том то и проблема...

Очень много итерацый и в каждой выполняется и чтение и запись... Ето и ест много ресурсов. Попробуйте переписывать пакетами по несколько байт.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...