System.FormatException произошло в mscorlib.dll

include «stdafx.h»

include «Form1.h»

include <math.h>

using namespace Lucifer;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Включение визуальных эффектов Windows XP до создания каких-либо элементов управления
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

// Создание главного окна и его запуск
Application::Run(gcnew Form1());
return 0;

}

System::Void Form1:: button1_Click(System::Object^ sender, System::EventArgs^ e) {
double a, b, c, x, y, min_x, max_x, hag ;
String ^str_a = «», ^str_b = «», ^str_c = «» ;
int i = 0 , l = textBox1->Text->Length, interval ;

for( ;textBox1->Text[i]!='x';i++){
    str_a += textBox1->Text[i] ;
}
if(str_a!="") {
    if(str_a=="-") a=-1;
    else a = Convert::ToDouble(str_a) ;// ошибку выдает здесь
}else a = 1 ;

i = i+5;
for( ; textBox1->Text[i]!='x';i++){
    str_b += textBox1->Text[i] ;//
}
if(str_b!="") {
    if(str_b=="-") b = -1;
    else if(str_b=="+") b = 1;
    else b = Convert::ToDouble(str_b) ;//здесь
}

i++;
for( ; i <l; i++ ){
str_c += textBox1->Text[i] ;
}
c = Convert::ToDouble(str_c) ;//и здесь

min_x = Convert :: ToDouble ( textBox2->Text ) ;
max_x = Convert :: ToDouble ( textBox3->Text ) ;
interval = Convert :: ToInt32 ( textBox4->Text ) ;
hag = ( ( min_x - max_x )* -1 ) / interval ;

for(int i=1 ; i < interval ; i++ ){
x = min_x + hag * i ;
y = a*(x*x) + b * x + c ;

System::Windows::Forms::DataVisualization::Charting::DataPoint^  point = (gcnew System::Windows::Forms::DataVisualization::Charting::DataPoint(x,y));
chart1->Series[0]->Points->Add(point);
}
System::Windows::Forms::DataVisualization::Charting::Title^  title1 = (gcnew System::Windows::Forms::DataVisualization::Charting::Title(textBox1->Text));

this->chart1->Titles->Add(title1);

}

Алексей, хелп не пробовали читать на тему Convert::ToDouble?

FormatException value is not a number in a valid format.

Поставте брекпоинт на оператор if и посмотрите что у вас в переменной. А по хорошему, такие вещи надо брать в try/catch.

Кстати, стрёмная конструкция:

for( ;textBox1->Text[i]!='x';i++){
    str_a += textBox1->Text[i] ;
}

Я особо в вашем коде не разбирался, но при любом чихе здесь будет выход за границу массива.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.