C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как считать число с плавающей точкой из файла, и занести его в Edit1->Text?
Dmitri
  Отправлено: 02.01.2004, 18:08


admin@localhost

Группа: Модератор
Сообщений: 110



Help! Почему не работает следующий код (мне надо считать число с плавающей точкой из файла и занести его в Edit1->Text):

CODE

FILE *in;
in=fopen("q.dat","r+");

Edit->Text.SetLength(4);
fscanf(in,"%s", Edit1->Text.c_str());
fellow
Отправлено: 02.01.2004, 18:27


Не зарегистрирован







Потому что Edit1->Text.c_str() может быть указателем как на константную С-строку, так и вообще на временный участок памяти. В хелпе ясно сказано, что c_str() предназначен для чтения содержимого AnsiString.
В духе Вашего кода более правильно было бы определить временный буфер, считать в него строку, затем передать её в Edit1->Text.
Admin
Отправлено: 02.01.2004, 18:30


Владимир

Группа: Администратор
Сообщений: 1190



CODE

FILE *in;
in=fopen("q.dat","r+");

double d;
fscanf(in, "%le", &d);
Edit1->Text = d;
fclose(in);


или

CODE

FILE *in;
in=fopen("q.dat","r+");

char s[100];
fscanf(in, "%s", s);
Edit1->Text = s;
fclose(in);
Dmitri
  Отправлено: 03.01.2004, 12:19


admin@localhost

Группа: Модератор
Сообщений: 110



QUOTE (fellow @ 02/01/2004, 21:29)
Потому что Edit1->Text.c_str() может быть указателем как  на константную С-строку, так и вообще на временный участок памяти. В хелпе ясно сказано, что c_str() предназначен для чтения содержимого AnsiString.
В духе Вашего кода более правильно было бы определить временный буфер, считать в него строку, затем передать её в Edit1->Text.

Можно поконкретнее? Т.е., понятно, что через буфер char buf[1024] можно загнать одну переменную. А если у меня Edit1, Edit2 и Edit3, при этом это не все содержимое файла, т.е. while(!eof()) не сработает?.. Тогда как считывать?

Отредактировано Dmitri — 03/01/2004, 15:22
fellow
Отправлено: 03.01.2004, 12:43


Не зарегистрирован







Посмотрите на постинг Admin'а, это то, что Вам и нужно.
Dmitri
Отправлено: 03.01.2004, 16:22


admin@localhost

Группа: Модератор
Сообщений: 110



Это неинтересно wink.gif И для 3 (преположим) Edit'ов надо выделять три переменные, а так — 1 буффер.
fellow
Отправлено: 03.01.2004, 16:36


Не зарегистрирован







Да зачем три? Один выделили и хватит. Всё делаете через него.

Вернуться в Вопросы программирования в C++Builder