Обсуждение Программирование на C/C++

Еще вопрос

Еще вопрос, вот тут:
Код:
int getLib(libData& izd)
    {
        cout << "\nEnter autor: ";
        cin >> izd.autorName;
        if(stricmp(izd.autorName, "exit")==0)
        {
            return 0;
        }
        cout << "Enter bookname: ";
        cin >> izd.bookName;
        cout << "Enter god izdaniya: ";
        cin >> izd.godIzd;
        return 1;
    }
Хочу чтобы поля autorName и bookName могли содержать несколько "слов". Тоесть что бы можно было ввести полное имя автора и название книги состоящее более чем из одного слова. Исходный вариант считывает массив только до первого пробела.
Попробовал такой вот вариант, с использованием функции getline():
Код:
int getLib(libData& izd)
    {
        cout << "\nEnter autor: ";
        cin.getline(izd.autorName,128);
        if(stricmp(izd.autorName, "exit")==0)
        {
            return 0;
        }
        cout << "Enter bookname: ";
        cin.getline(izd.bookName,128);
        cout << "Enter god izdaniya: ";
        cin >> izd.godIzd;
        return 1;
    }
Работает тоже некорректно, а почему немогу понять.
Подскажите где я ошибся?
Пишу в Code::Blocks 8.02
 

AlexDev

Ословед
у меня в Visual Studio 2010 такой код отрабатывает на "ура".
Сказать точно в чем проблема не могу, но попробуй после чтения, очистить буфер с помощью _flushall() ;
 
у меня в Visual Studio 2010 такой код отрабатывает на "ура".
Сказать точно в чем проблема не могу, но попробуй после чтения, очистить буфер с помощью _flushall() ;

У меня программа компилится, запускается, но нормально проходит только первая итерация, во второй почему то он пропуская первое поле.
 

Yanus Odron

Ословед
Среда c++Builder

Я объявил список строк типа TStringList
TStringList*list=new TStringList();

Заполнил его, и вот не задача, один символ из строки мне не понравился.

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

Решил таким образом затереть символ, следующим:
list->Strings[x][y] = list->Strings[x][y+1]

Но не получилось, ругается.


Вообщем сам вопрос:
Подскажите, как можно удалить символ из строки?
 
Среда c++Builder

Я объявил список строк типа TStringList
TStringList*list=new TStringList();

Заполнил его, и вот не задача, один символ из строки мне не понравился.

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

Решил таким образом затереть символ, следующим:
list->Strings[x][y] = list->Strings[x][y+1]

Но не получилось, ругается.


Вообщем сам вопрос:
Подскажите, как можно удалить символ из строки?

Код:
      TStringList*list=new TStringList();
      AnsiString str;
      list->Add("qwerty");
      list->Add("asdfgh");
      list->Add("zxcvb");
      str = list->Strings[1];
      str[4] = (list->Strings[1])[5];
      list->Strings[1] = str;
      Label1->Caption = list->Strings[1];
 

Yanus Odron

Ословед
Код:
      str[4] = (list->Strings[1])[5];

Чет не понял как это работает.

А понял,
записывает заместо 4 символа в str, 5 символ из list->Strings[1], и что дальше?, ну выведет он мне всеравно 6 символов, а не 5.
результат: asdggh


И зачем str = list->Strings[1]; ? Чтобы память выделить? Не понятно (

Ну допустим:

Код:
      TStringList*list=new TStringList();
      AnsiString str;
      list->Add("qwerty");
      list->Add("asdfgh");
      list->Add("zxcvb");
for (int i=1; i<=list->Strings[1].Length();i++) {
     if(i != 5 ) str[i] =  (list->Strings[1])[i];
}
      list->Strings[1] = str;
      Label1->Caption = list->Strings[1];

Так чтоле?

неет не так( переполнение памяти вылетает(
 
Подскажите, функцию clrscr() можно с виндой как нить подружить? Во всех справочниках натыкаюсь на то что она не совместима с Windows.
 
подскажите почему ошибку выдает? буде очень благодарен:shuffle: код на С
а то вроде все заголовочные файлы правильно прописаны а компилятор ругается=(
Код:
include <graphics.h>
include <conio.h>
include <stdlib.h>
include <alloc.h>

int draw(int x, int y)

{

circle(x,y,5);

putpixel(x-2,y-2,15);

putpixel(x+2,y-2,15);

putpixel(x,y,15);

line(x-1,y+2,x+1,y+2);

return 0;

}

void main(void)

{

int gdriver = DETECT, gmode;

initgraph(&gdriver, &gmode, "");

void *M;

int i, j, x, y, x1, y1, k=0;

char s[2], c[10]={"123456789"};

randomize();

int Applex[61]={20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,
620};

int Appley[38]={20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390};

int size;

x=320;

y=200;

rectangle(13,13,627,397);

outtextxy(290,450,"Score: 0");

i=random(60);

j=random(38);

x1=Applex[i];

y1=Appley[j];

draw(x,y);

size = imagesize(x-5, y-5, x+5, y+5);

M = malloc(size);

getimage(x-5, y-5, x+5, y+5, M);

int key;

int nx=x;

int ny=y;

do

{

circle(x1,y1,5);

line(x1,y1-5,x1,y1-7);

floodfill(x1,y1,15);

if(kbhit()) key=getch();

if(key==80) ny+=10;

if(key==72) ny-=10;

if(key==77) nx+=10;

if(key==75) nx-=10;

delay(150);

putimage(x-5, y-5, M, XOR_PUT);

x = nx;

y=ny;

if (ny>=392| ny<=18| nx>=622| nx<=18)

{

outtextxy(250,200,"Snake left for border");

getch();

closegraph();

}

if (x==x1 && y==y1)

{

s[0]=c[k];

s[1]='\0';

cleardevice();

rectangle(13,13,627,397);

outtextxy(290,450,"Score: ");

i=random(60);

j=random(38);

x1=Applex[i];

y1=Appley[j];

circle(x1,y1,5);

line(x1,y1-5,x1,y1-7);

outtextxy(347,450,s);

k++;

}

putimage(x-5, y-5, M, XOR_PUT);

}

while(key!=27);

free(M);

getch();

closegraph();

}
 
спасибо рештку забыл ступил, курсовик седел делал уже перед глазами поплыло ничего не замечаю=( после этого 26 ошибок выдало=(
п.с. люди мб у кого есть прога-игруха какая нить на Си? что то типо змейки или что то на подобие кроме крестиков ноликов=) а то уже тошнит от яндекса и гоголя... у кого есть скиньте исходник если не трудно=)
 
Сверху