Перейти к содержанию

С/С++ Вопросы и ответы ()


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

Lakers scanf разве строки считывает ? Я чет никогда не слыхал...

Да и проблемма не в этом с функцией считывания я разобрался, но ошибку странную выдает Вижуал студио: cannot convert parameter 1 from 'char' to 'const char *' догнать не могу что я не так сделал.

Ссылка на комментарий

Cristian

в том что ты написал strlen работать не будет, т.к. параметр должен быть типа char*, а не просто char. От отго ошибка и вылазит.

Добавлено спустя 1 минуту 26 секунд:

напиши strlen(&C) тогда уж.

Добавлено спустя 24 секунды:

Хотя тоже работать правильно не будет, зато ошибка пропадет :)

Ссылка на комментарий
  • 2 недели спустя...

В чем проблемма ? У меня после 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() не читает пробелы в строке, поэтому вместо пробела пришлось использовать '_'.

Ссылка на комментарий

у меня в паскале как то раз (при создании этой же программы для шифровки текста, еще на первом курсе) тоже не вводился текст после косанды WRITELN. так и тут следующий оператор ввода после команды printf("Vvedite frazu dla shifrovki: "); не используется. если написать

gets(X);gets(X); всё начинает работать.

P.S. строки которые не делятся нацело на n тоже по идеи кодируются.

Добавлено спустя 6 минут 36 секунд:

еще скобка в конце лишняя одна.

Добавлено спустя 3 минуты 26 секунд:

а может это и не изза оператора printf("Vvedite frazu dla shifrovki: "); а изза того что ты вводиш числа, а после ввода в буфере остаётся он то и считывается первой командой gets(X)

Ссылка на комментарий

Обьесните пожалуйста что делают функции putchar() и getchar(), и ещё не понял что делают такие символы "%" (они в printf) ? *09

И вобще чем отличаються cout и printf?

Ссылка на комментарий
Ksander

getchar считывает символ и и putchar печатает

Пользуйся cout и не парься. printf - это пережитки чистого С :)

Можно поподробнее нащёт getchar и putchar :)

Ссылка на комментарий
Ksander

getchar считывает символ и и putchar печатает

Пользуйся cout и не парься. printf - это пережитки чистого С :)

Можно поподробнее нащёт getchar и putchar *16

getchar

putchar

Ссылка на комментарий

Вообщем проблемка, господа, причем причина вообще непонятна, возможно это конечно 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);
}

Ссылка на комментарий
  • 3 месяца спустя...

Как сделать картинку фоном формы? Желательно *.jpg или *.png (поддержка альфа-канала приветствуктся, хотя необязательно)

Пытаюсь так

Graph->LoadFromFile("pic1.bmp");
Form1->Canvas->Draw(0,0,Graph);

где

TGraphic* Graph;

Ругается на первую строчку уже после компиляции

pic1_6452fa7aa70198bbf48ccabc5afe4c4e.png

Если нажать Continue, по после еще одной ошибки

pic2_48ab7de2f642af46177fcbe1e0197096.png

программа запускается, но фон дефолтный. Файл лежит в папке с проектом.

Ссылка на комментарий

память под 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 

Ссылка на комментарий

Justice

а кто создаст "объект"?

собственно AV об этом и напоминает.

поддержка альфа-канала приветствуктся

это как ? т.е. если альфой сделан круг, то и форма должна быть круглой или за альфой просвечивается "фон" формы ?

Ссылка на комментарий
#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 об этом и напоминает.

Ниче не понял
это как ? т.е. если альфой сделан круг, то и форма должна быть круглой
Что-то типа того.
Ссылка на комментарий
Что-то типа того.

не, это совсем другое чем "типо того".

тут draw на "форму" не решает.

начинай смотреть

SetWindowRgn и далее от фантазии и прочих факторов.

Ссылка на комментарий
  • 4 недели спустя...
:)
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... что не так?

Ссылка на комментарий

Ну дак... как сделать чтобы в константе типа const char* хранилось DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS и при этом дурацкая функция не ругалась? 126967066296.jpg

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); все та же ошибка

Ссылка на комментарий

  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 []

Ссылка на комментарий

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 секунд:

почитай и сравни.

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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