Перейти к содержанию
СофтФорум - всё о компьютерах и не только

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


Рекомендуемые сообщения

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

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

Я в обработчике события 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;  }

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

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

=(

Ссылка на комментарий
Поделиться на другие сайты

DoctorG:

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

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

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Не ну хорошо. А что делать с нежеланием компилятора, складывать, делить и умножать?

Ссылка на комментарий
Поделиться на другие сайты

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

-----

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

Изменено пользователем DoctorG
Ссылка на комментарий
Поделиться на другие сайты

DoctorG:

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

...

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

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

Lion HC:

что значит симовол ^
Операция побитового исключающего "ИЛИ". Каким образом ее использует в своей программеDoctorG, знает только он сам ;).
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

KeyPress

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

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

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

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

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

StreamWriter^ sw = gcnew StreamWriter(fileName);

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

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

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

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

Изменено пользователем Shadow TH
Ссылка на комментарий
Поделиться на другие сайты

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

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

Изменено пользователем Shadow TH
Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...