powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Такой вот вопросик по С++
16 сообщений из 16, страница 1 из 1
Такой вот вопросик по С++
    #34433498
Romka_84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. У меня така проблема: надо диплом написать на С++ в Visual Studio(диплом по сути дела заключается в некоей хитрой обработке файлов). Вот... А с этим С++ я знаком не очень хорошо. Дак вот, вчера(и позавчера) сидел полночи, читал Страуструпа, еще разных дядек умных читал - в теории все легко, я во время учебы на Си обыкновенном писал программки без проблем. А вот на практике, когда я Visual Studio(далее просто VS) включил - фигня какаято. Тяк что если кто в курсе - просветите меня по следующим вопросам(извиняюсь, если они покажутся Вам глупыми и тупыми :) ) :

1) Насколько я понял в VS есть просто функции, константы, а есть их дотНетовские эквиваленты. Мне с дотНетом работать гораздо удобней - наклепал форму, присобачил ей функции и зер гут. Но возникла проблема следующего плана: стандартный способ читания файла(смотрел пример в МСДН) - считывает все в переменную типа String^(че за ^ понятия не имею). И все текстовые свойтва контролов(там например Text иль Caption) требуют строку такого типа. И все бы хорошо, и функции для обработки таких строк удобные, и файл считывается прекрасно и ваще все гут, НО... Почемуто не читаются русские буквы из файла и(что меня гораздо больше бесит!) такой тип String^ нельзя использовать в конструкции struct, которая мне очень удобна. Если ктонибудь в курсе, можно ли как то использовать подобный тип с русскими буквами и со struct-ом - подскажите пжлста.

2) Следующие вопросы уже от того, что не могу добиться толку с первым вариантом. Использую стандартные fopen, fgets и т.д. и т.п. Во-первых, можно ли как нибудь считать весь файл в одну строку(желательно чтоб эта строка была типа std::string). Во-вторых, можно ли потом обработанную переменную типа string записать в файл? И вообще, абсолютно не могу понять следущей фигни(наверно я очень тупой):

std::string s;
char* ch1;
char ch2[20];
FILE *fr;

s="1";
ch1="1";

if (fopen_s(&fr, "1.txt", "r") == 0){
// функция char *fgets(char *str, int n, FILE *stream);
//Функция типа char* !, параметры сами видите какие, дак вот

fgets(ch1, 20, fr); //какая то опшибка, ети!
fgets(ch2, 20, fr); //нет опшибки!
// Пачиму?, ведь первый параметр типа char*, не догоняю. Ладно, далее...

s=fgets(ch1, 20, fr); //переменной типа string присваивается результат функции типа char* без проблем!
ch1=fgets(ch1, 20, fr); //переменной типа char* присваивается результат функции типа char* без проблем!
s=ch1 // как я тут не выпендривался, а присвоить не удалось - почему?, ведь секунду назад все было гут?

fclose(fr);
};

Ну и так далее. Не хочу дальше грузить Вас своими тупыми вопросами. Если кому нить не сложно - ответьте не очень умному человеку пжлста, буду очень и очень благодарен.
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34433894
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Массив - это идентификатор участка памяти. Имя массива всегда указывает на определенный участок памяти.
Указатель - переменная содержащая адрес памяти. Необходимо иницировать каким-то значением, иначе он будет указывать неизвестно куда.
В fgets надо передовать указатель на участок памяти.
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34434280
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romka_84Почемуто не читаются русские буквы из файлапри открытии файла выставляй кодировку, читай доки.

Romka_84и(что меня гораздо больше бесит!) такой тип String^ нельзя использовать в конструкции struct, которая мне очень удобна.управляемые типы можно использовать только в управляемых типах. МС++ – язык со своими фичами http://msdn2.microsoft.com/en-us/library/xey702bw.aspx
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34434342
Romka_84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkhМассив - это идентификатор участка памяти. Имя массива всегда указывает на определенный участок памяти.
Указатель - переменная содержащая адрес памяти. Необходимо иницировать каким-то значением, иначе он будет указывать неизвестно куда.
В fgets надо передовать указатель на участок памяти.

Огромное спасибо за пояснение. Но, толи я чет туплю, толи еще что нибудь:

char* ch1;
FILE *fr;

ch1="1"; //насколько я понял, ты это имеешь ввиду
if (fopen_s(&fr, "1.txt", "r") == 0){
fgets(ch1, 20, fr); //какая то опшибка, ети!, неважно инициировано ch1 значением или нет

Такая вот фигня - не могу понять.
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34434358
Romka_84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmo Romka_84Почемуто не читаются русские буквы из файлапри открытии файла выставляй кодировку, читай доки.

Romka_84и(что меня гораздо больше бесит!) такой тип String^ нельзя использовать в конструкции struct, которая мне очень удобна.управляемые типы можно использовать только в управляемых типах. МС++ – язык со своими фичами http://msdn2.microsoft.com/en-us/library/xey702bw.aspx

Спасиб большое, справку почитаю обязательно. И, если не сложно, кодировку при чтении как выбирать?
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34434395
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romka_84 AkhМассив - это идентификатор участка памяти. Имя массива всегда указывает на определенный участок памяти.
Указатель - переменная содержащая адрес памяти. Необходимо иницировать каким-то значением, иначе он будет указывать неизвестно куда.
В fgets надо передовать указатель на участок памяти.

Огромное спасибо за пояснение. Но, толи я чет туплю, толи еще что нибудь:

char* ch1;
FILE *fr;

ch1="1"; //насколько я понял, ты это имеешь ввиду
if (fopen_s(&fr, "1.txt", "r") == 0){
fgets(ch1, 20, fr); //какая то опшибка, ети!, неважно инициировано ch1 значением или нет

Такая вот фигня - не могу понять.

Во первых "1" может находится в какой-нибудь статической/read-only памяти и писать туда нельзя. Точно не уверен.
А во вторых в "1" есть всего 2 байта, а ты читаешь туда 20.
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34434528
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romka_84кодировку при чтении как выбирать?в конструкторе StreamReader'a
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34435219
cppcompiler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а ты не пробовал:
char* ch1[];
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34435257
aak__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romka_84

if (fopen_s(&fr, "1.txt", "r") == 0){



Код: plaintext
1.
if (fopen_s(fr, "1.txt", "r") ==  0 ){
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34435268
aak__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только под fr необх. выделить память )

а вообще, см. MSDN:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
#include <stdio.h>

FILE *stream, *stream2;

void main( void )
{
   int numclosed;

   /* Open for read (will fail if file "data" does not exist) */
   if( (stream  = fopen( "data", "r" )) == NULL )
      printf( "The file 'data' was not opened\n" );
   else
      printf( "The file 'data' was opened\n" );

   /* Open for write */
   if( (stream2 = fopen( "data2", "w+" )) == NULL )
      printf( "The file 'data2' was not opened\n" );
   else
      printf( "The file 'data2' was opened\n" );

   /* Close stream */
   if( fclose( stream ) )
      printf( "The file 'data' was not closed\n" );

   /* All other files are closed: */
   numclosed = _fcloseall( );
   printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34437727
Romka_84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoуправляемые типы можно использовать только в управляемых типах. МС++ – язык со своими фичами http://msdn2.microsoft.com/en-us/library/xey702bw.aspx

По ентому делу почитал справку. Вродь все написано, но чет не могу опять до конца догнать. Например такой вот текст:

public ref struct MyStruct{ //для того чтоб тип String^ ипользовать нужно ref
String^ s;
int n;}

Теперь из таких элементов мне нужен массив, к примеру так:

public ref struct Arr{
array<MyStruct^>^ m; //здесь компилятор почему то просит две ^, хотя в МСДН приводится пример с одной
int max;
}

Так все компилится. Вопрос: а как дальше то собственно этот массив использовать? пишу к примеру так:

Arr a;

a.m[0]->s="qwerty"; //на этой строке вылетает опшибка
//вроде бы нужно с этим массивом чет сделать, делаю по аналогии с МСДН:
a.m = gcnew array<MyStruct^>(100); //вроде бы опять все компилится но при строке a.m[0]->s="qwerty" опять вылетает та же опшибка

Если ктонить в курсе как делать такую штуку - подскажите пжлста, у меня ток в этом загвоздка и осталась.
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34437851
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у тебя же везде ссылочные типы. Их надо инициализировать. А то сначала же у тебя всё по нулям.

Код: plaintext
1.
2.
3.
Arr a = gcnew Arr();
a.m = gcnew array<MyStruct^>( 100 );
a.m[ 0 ] = gcnew MyStruct();
a.m[ 0 ]->s = S"qwerty";

и учись читать сообщения об ошибке, там много полезного пишут.
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34437885
Romka_84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoу тебя же везде ссылочные типы. Их надо инициализировать. А то сначала же у тебя всё по нулям.

Код: plaintext
1.
2.
3.
Arr a = gcnew Arr();
a.m = gcnew array<MyStruct^>( 100 );
a.m[ 0 ] = gcnew MyStruct();
a.m[ 0 ]->s = S"qwerty";

и учись читать сообщения об ошибке, там много полезного пишут.

Спасибо просто преогромное! А сообщение об опшибке было как бы сложно понять ), непосредственно во время выполнения выскочило - по адресу такомуто произошла фигня - че такое я не знаю.
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34438071
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Romka_84А сообщение об опшибке было как бы сложно понять ), непосредственно во время выполнения выскочило - по адресу такомуто произошла фигня - че такое я не знаю.вот и говорю учись читать, компиль в дебуг и читай, без этого ты много не напишешь.
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34439688
Romka_84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmo
Код: plaintext
1.
2.
3.
Arr a = gcnew Arr();
a.m = gcnew array<MyStruct^>( 100 );
a.m[ 0 ] = gcnew MyStruct();
a.m[ 0 ]->s = S"qwerty";


И еще вопросик. А как потом это чистить. У меня в цикле этот массив используется многократно и в какой то счастливый момент программа вылетает. Я так понимаю скорее всего из-за переполнения. Использую Clear, все равно вылетает.
...
Рейтинг: 0 / 0
Такой вот вопросик по С++
    #34442580
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
управление памяти в .нете автоматическое.
А проблему в формулировке «у меня ничо не работает» тебе никто решать не будет. Я уже сказал читать сообщения об ошибке, и вспомни наконец про дебаггер, он сделан специально для борьбы с ошибками.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Такой вот вопросик по С++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]