Cristian Опубликовано 11 декабря, 2009 Жалоба Поделиться Опубликовано 11 декабря, 2009 Lakers scanf разве строки считывает ? Я чет никогда не слыхал...Да и проблемма не в этом с функцией считывания я разобрался, но ошибку странную выдает Вижуал студио: cannot convert parameter 1 from 'char' to 'const char *' догнать не могу что я не так сделал. Цитата Ссылка на комментарий
Lakers Опубликовано 11 декабря, 2009 Жалоба Поделиться Опубликовано 11 декабря, 2009 Cristianсчитывает если написать scanf("%s",&C).на какой строке эта ошибка? Цитата Ссылка на комментарий
CooDi Опубликовано 11 декабря, 2009 Жалоба Поделиться Опубликовано 11 декабря, 2009 Cristianв том что ты написал strlen работать не будет, т.к. параметр должен быть типа char*, а не просто char. От отго ошибка и вылазит.Добавлено спустя 1 минуту 26 секунд:напиши strlen(&C) тогда уж.Добавлено спустя 24 секунды:Хотя тоже работать правильно не будет, зато ошибка пропадет Цитата Ссылка на комментарий
0xDEADBEEF Опубликовано 11 декабря, 2009 Жалоба Поделиться Опубликовано 11 декабря, 2009 Lakers, CooDiС имеет тип char[100] или char* , что равносильно. Ошибки здесь нет Цитата Ссылка на комментарий
CooDi Опубликовано 11 декабря, 2009 Жалоба Поделиться Опубликовано 11 декабря, 2009 0xDEADBEEFты не туда смотришь, Cristian написал просто char C; Цитата Ссылка на комментарий
Cristian Опубликовано 20 декабря, 2009 Жалоба Поделиться Опубликовано 20 декабря, 2009 В чем проблемма ? У меня после gets(X) как я только хочу ввести строку, нажимаю и прога закрывается. В тексте показано это место <<<<<#include "stdafx.h"#include "string.h"#include "math.h"#include int main(){ char C[28]="_abcdefghijklmnopqrstuvwxyz"; int D[28]={0,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}; int Q[1000]; int A[100][100]; // Вводимая матрица. char X[1000]; // Кодируемая строка. int B[100][100]; // Шифрованый текст через номера. int S[100][100]; int i,j,k,a,p=0,n; printf("Vveditdffdde razmernost matrici A: "); scanf("%i",&n); // ввод размерности квадратной матрицы А. for(i=0;i { for(j=0;j { printf("Vvedite element matrici A[%i][%i]:",i,j); scanf("%i",&A[j]); // ввод матрицы А. } } printf("Vvedite frazu dla shifrovki: "); gets(X); <<<<<<<<<< a=(strlen(X) % n); if(a==0) { for(i=0;i { for(j=0;j<27;j++) { if(X==C[j]) Q=D[j]; } } k=strlen(X)/n; //определение количества строк for(i=0;i { for(j=0;j { S[j]=Q[p];p++; //заполнение матрицы S, номерами из матр. Q. } } for(i=0;i { for(j=0;j { if(j==(k-1)) { printf(" %i \n",S[j]); } else printf(" %i ",S[j]); } } } else {printf("Vi vveli necorrektnyu frazu");} getch(); return 0;}}PS: Когда я использую вместо gets() ,scanf() то все работает, вот только scanf() не читает пробелы в строке, поэтому вместо пробела пришлось использовать '_'. Цитата Ссылка на комментарий
Lakers Опубликовано 20 декабря, 2009 Жалоба Поделиться Опубликовано 20 декабря, 2009 у меня в паскале как то раз (при создании этой же программы для шифровки текста, еще на первом курсе) тоже не вводился текст после косанды WRITELN. так и тут следующий оператор ввода после команды printf("Vvedite frazu dla shifrovki: "); не используется. если написатьgets(X);gets(X); всё начинает работать.P.S. строки которые не делятся нацело на n тоже по идеи кодируются.Добавлено спустя 6 минут 36 секунд:еще скобка в конце лишняя одна.Добавлено спустя 3 минуты 26 секунд:а может это и не изза оператора printf("Vvedite frazu dla shifrovki: "); а изза того что ты вводиш числа, а после ввода в буфере остаётся он то и считывается первой командой gets(X) Цитата Ссылка на комментарий
Ksander Опубликовано 20 декабря, 2009 Жалоба Поделиться Опубликовано 20 декабря, 2009 Обьесните пожалуйста что делают функции putchar() и getchar(), и ещё не понял что делают такие символы "%" (они в printf) ? *09И вобще чем отличаються cout и printf? Цитата Ссылка на комментарий
CooDi Опубликовано 20 декабря, 2009 Жалоба Поделиться Опубликовано 20 декабря, 2009 Ksandergetchar считывает символ и и putchar печатаетПользуйся cout и не парься. printf - это пережитки чистого С Цитата Ссылка на комментарий
Cristian Опубликовано 21 декабря, 2009 Жалоба Поделиться Опубликовано 21 декабря, 2009 Lakers действительно gets надо было поставить просто раньше.... Цитата Ссылка на комментарий
Ksander Опубликовано 22 декабря, 2009 Жалоба Поделиться Опубликовано 22 декабря, 2009 Ksandergetchar считывает символ и и putchar печатаетПользуйся cout и не парься. printf - это пережитки чистого С Можно поподробнее нащёт getchar и putchar Цитата Ссылка на комментарий
JSTQ Опубликовано 22 декабря, 2009 Жалоба Поделиться Опубликовано 22 декабря, 2009 Ksandergetchar считывает символ и и putchar печатаетПользуйся cout и не парься. printf - это пережитки чистого С Можно поподробнее нащёт getchar и putchar *16getcharputchar Цитата Ссылка на комментарий
Vanix Опубликовано 22 декабря, 2009 Жалоба Поделиться Опубликовано 22 декабря, 2009 Вообщем проблемка, господа, причем причина вообще непонятна, возможно это конечно C Builder 6 тупит,но мб это все таки моя ошибка.Вот собственно и сама проблема: без левой ансистринговской переменной Tmp, не конвертируется из Char в AnsiString в строке (Res->printf("%s",Buf); ), причем Tmp !!!АБСОЛЮТНО!!! нигде не используетсяЧто бы проверить нужно создать проект кинуть туда один едит и один баттон, ну и код ессно скопироватьconst AnsiString Gamma = "1273784";AnsiString TForm1::Coding(AnsiString Str){ AnsiString *Res, Tmp; unsigned char Buf[100]; for(int i = 0; i < 100; i++){ Buf[i] = 0; } unsigned char *PBuf = NULL; PBuf = Str.c_str(); short i = 1; for(short j = 0;j < Str.Length(); j++){ Buf[j] = (char)((int)PBuf[j]^StrToInt(Gamma[i])); i++; if(i > Gamma.Length()){ i = 1; } } PBuf = '\0'; Res->printf("%s",Buf); return *Res;}void __fastcall TForm1::Button1Click(TObject *Sender){ Edit1->Text = Coding(Edit1->Text);} Цитата Ссылка на комментарий
JSTQ Опубликовано 19 апреля, 2010 Жалоба Поделиться Опубликовано 19 апреля, 2010 Как сделать картинку фоном формы? Желательно *.jpg или *.png (поддержка альфа-канала приветствуктся, хотя необязательно)Пытаюсь такGraph->LoadFromFile("pic1.bmp");Form1->Canvas->Draw(0,0,Graph);гдеTGraphic* Graph;Ругается на первую строчку уже после компиляцииЕсли нажать Continue, по после еще одной ошибкипрограмма запускается, но фон дефолтный. Файл лежит в папке с проектом. Цитата Ссылка на комментарий
Lakers Опубликовано 19 апреля, 2010 Жалоба Поделиться Опубликовано 19 апреля, 2010 память под Graph точно выделена?Graphics::TBitmap * Bitmap = new Graphics::TBitmap;TJPEGImage * examp = new TJPEGImage;examp->LoadFromFile("test.jpg");Bitmap->Assign(examp);Canvas->Draw(10,10,Bitmap);delete examp;#include Цитата Ссылка на комментарий
coder Опубликовано 19 апреля, 2010 Жалоба Поделиться Опубликовано 19 апреля, 2010 Justiceа кто создаст "объект"?собственно AV об этом и напоминает.поддержка альфа-канала приветствуктсяэто как ? т.е. если альфой сделан круг, то и форма должна быть круглой или за альфой просвечивается "фон" формы ? Цитата Ссылка на комментарий
JSTQ Опубликовано 19 апреля, 2010 Жалоба Поделиться Опубликовано 19 апреля, 2010 #include Graphics::TBitmap * Bitmap = new Graphics::TBitmap;TJPEGImage * examp = new TJPEGImage;examp->LoadFromFile("test.jpg");Bitmap->Assign(examp);Canvas->Draw(10,10,Bitmap);delete examp;Сделал так, картинка там где надо, но фон не поменялсяа кто создаст "объект"?собственно AV об этом и напоминает.Ниче не понялэто как ? т.е. если альфой сделан круг, то и форма должна быть круглойЧто-то типа того. Цитата Ссылка на комментарий
Lakers Опубликовано 19 апреля, 2010 Жалоба Поделиться Опубликовано 19 апреля, 2010 AV-access violation Цитата Ссылка на комментарий
прохожий Опубликовано 20 апреля, 2010 Жалоба Поделиться Опубликовано 20 апреля, 2010 Что-то типа того.не, это совсем другое чем "типо того".тут draw на "форму" не решает.начинай смотретьSetWindowRgn и далее от фантазии и прочих факторов. Цитата Ссылка на комментарий
JSTQ Опубликовано 19 мая, 2010 Жалоба Поделиться Опубликовано 19 мая, 2010 void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State){TStringGrid *Box= ((TStringGrid*)Sender);TCanvas *ACanvas=Box->Canvas; ACanvas->Brush->Color=clWhite; ACanvas->FillRect(Rect); ACanvas->Brush->Style=bsClear; ACanvas->Font->Color=clBlack; char ch; wchar_t wch=DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; //MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, &ch, 1, &wch, 1); int q=1; WideCharToMultiByte(CP_ACP, MB_PRECOMPOSED, &wch, 1, &ch, 1, &ch, &q); DrawText(ACanvas->Handle,Box->Cells[ACol][ARow].c_str(),Box->Cells[ACol][ARow].Length(), &Rect, ch); ACanvas->Brush->Style=bsSolid;}В DrawText - ошибка конвертации 'wchar_t *' в 'const char *' (хотя ch - char) + несоответствие типов 'IpchText' (хотел 'const char *', получил 'wchar_t'). Я вроде нормально конвертнул wchar_t в char... что не так? Цитата Ссылка на комментарий
CooDi Опубликовано 19 мая, 2010 Жалоба Поделиться Опубликовано 19 мая, 2010 char - это один символ, а не строка. Цитата Ссылка на комментарий
JSTQ Опубликовано 19 мая, 2010 Жалоба Поделиться Опубликовано 19 мая, 2010 Ну дак... как сделать чтобы в константе типа const char* хранилось DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS и при этом дурацкая функция не ругалась? const char z=DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; DrawText(ACanvas->Handle,Box->Cells[ACol][ARow].c_str(),Box->Cells[ACol][ARow].Length(), &Rect, z);const char *z=DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; DrawText(ACanvas->Handle,Box->Cells[ACol][ARow].c_str(),Box->Cells[ACol][ARow].Length(), &Rect, z);const char z=DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; DrawText(ACanvas->Handle,Box->Cells[ACol][ARow].c_str(),Box->Cells[ACol][ARow].Length(), &Rect, &z);тоже самоеint WideCharToMultiByte( UINT CodePage, // кодовая страница DWORD dwFlags, // флаги LPCWSTR lpWideCharStr, // адрес на wide-character строку int cchWideChar, // количество символов в строке LPSTR lpMultiByteStr, // адрес на буфер для новой строки int cchMultiByte, // резмер буфера LPCSTR lpDefaultChar, // параметры, которые применяются при LPBOOL lpUsedDefaultChar // обработке неправильных символов );С вызовом типа WideCharToMultiByte(CP_ACP, WC_DEFAULTCHAR, &wch, 50, &ch, 50, NULL, NULL); все та же ошибка Цитата Ссылка на комментарий
CooDi Опубликовано 19 мая, 2010 Жалоба Поделиться Опубликовано 19 мая, 2010 создай переменную типа char*, а не char, а лучше char[] - все равно длина практически известна и не меняется. Цитата Ссылка на комментарий
JSTQ Опубликовано 19 мая, 2010 Жалоба Поделиться Опубликовано 19 мая, 2010 char* z="DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS"; DrawText(ACanvas->Handle,Box->Cells[ACol][ARow].c_str(),Box->Cells[ACol][ARow].Length(),&Rect, z); char z[]="DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS"; DrawText(ACanvas->Handle,Box->Cells[ACol][ARow].c_str(),Box->Cells[ACol][ARow].Length(),&Rect, z);Такая же ошибкаЕсли без кавычек - Cannot convert int to char [] Цитата Ссылка на комментарий
CooDi Опубликовано 19 мая, 2010 Жалоба Поделиться Опубликовано 19 мая, 2010 function DrawText(DC: HDC; Str: PChar; Count: Integer; var Rect: TRect; Format: Word): Integer;Рисует фоpматиpованный текст. Тип фоpматиpования указывается паpаметpом Format. Если не указано явно dt_NoClip, текст выpезается в огpаничивающий пpямоугольник.ПаpаметpыDC: Идентификатоp контекста устpойства.Str: Рисуемая стpока. Если Count=-1, то должна заканчиваться пустым символом.Rect: TRect, огpаничивающий текст.Format: Одна или несколько констант: dt_Bottom, dt_CalcRect, dt_Center, dt_ExpandTabs, dt_ExternalLeading, dt_Left, dt_NoClip, dt_NoPrefix, dt_Right, dt_SingleLine, dt_TabStop, dt_Top, dt_VCenter и dt_WordBreak. См. pаздел "Флаги фоpматиpования текста пpи pисовании, dt_" в главе 1.Возвpащаемое значениеВысота текста.Добавлено спустя 16 секунд:почитай и сравни. Цитата Ссылка на комментарий
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.