Программирование. (Язык: Си)

avatar ..DS

657

10

..DS

Пользователь

Регистрация: 17.06.2013

Сообщения: 149

Рейтинг: 43

..DS

Регистрация: 17.06.2013

Сообщения: 149

Рейтинг: 43

Ребята, спасайте. Для сдачи аттестации надо написать программу: база данных, в которой можно будет удалять, добавлять, просматривать и т.п. (Это всё потом).

Начал писать код, добавил ф-цию добавления, но столкнулся с проблемой: первую запись добавляет нормально, а вторую и последующую записи начинает записывать со второго столбца.. Не знаю как это исправить.(

Преподаватель по программированию говорит, что надо перед вводом с клавиатуры очистить входной буфер, но я немного не понимаю как это сделать...

Если кто знает, подскажите, пожалуйста. Буду очень сильно благодарен.

Вот код:

#include
#include
#include
#include




void menu()
{

int a=3, b=22, c;

textbackground(CYAN);

textcolor(BLACK);

clrscr();

textbackground(WHITE);

gotoxy(1,1);

cputs(" Imya
| GodiZhizni | Napravlenie |
Strana
| Kolichestvo sochinenij
|");

gotoxy(1,25);

cputs("
Enter

F2(edit)

F3(remove)

F4(new)

ESC

");

gotoxy(1,2);

textbackground(CYAN);

cputs("-----------|--------------|-------------|-------------|------------------------|");

cputs("


|


|


|


|





|");

for (c=0; c<=b; c++)

{


gotoxy(1,a);


cputs("


|


|


|


|





|");


a++;

}
}



typedef struct comp
{

char *name, *year, *epoha, *strana;

int soch;

struct comp *next;
} COMP;
COMP *add_comp(COMP *h, int n)
{

COMP *cur=h, *new_comp;

int i,j,k;

i=1;

j=0;

for(k=0;k
{


j++;

}

new_comp=(COMP*)malloc(sizeof(COMP));

if(new_comp==NULL)

return NULL;

gotoxy(i,j);

gets(new_comp->name);

i=i+14;

gotoxy(i,j);

gets(new_comp->year);

i=i+14;

gotoxy(i,j);

gets(new_comp->epoha);

i=i+14;

gotoxy(i,j);

gets(new_comp->strana);

i=i+14;

gotoxy(i,j);

scanf("%d", &new_comp->soch);

new_comp->next=NULL;

if(h==NULL)

h=new_comp;

else

{


while(cur->next!=NULL)


cur=cur->next;


cur->next=new_comp;

}

return h;
}
void main()
{

COMP *h=NULL;

int key,n=3;

menu();

do

{


key=getch();


switch(key)


{



case 13: gotoxy(1,1); break;



case 60: h=add_comp(h,n); n++; break;


}

}
while(key!=27);
getch();
}

fonetic

Пользователь

Регистрация: 29.10.2012

Сообщения: 3593

Рейтинг: 783

fonetic

Регистрация: 29.10.2012

Сообщения: 3593

Рейтинг: 783

А в словарь языка си не как не посмотреть ?

serfad

Пользователь

Регистрация: 11.03.2014

Сообщения: 254

Рейтинг: 110

serfad

Регистрация: 11.03.2014

Сообщения: 254

Рейтинг: 110

Поясните пожалуйста, какой входной буфер?

..DS

Пользователь

Регистрация: 17.06.2013

Сообщения: 149

Рейтинг: 43

..DS

Регистрация: 17.06.2013

Сообщения: 149

Рейтинг: 43

serfad сказал(а):
Поясните пожалуйста, какой входной буфер?
Нажмите, чтобы раскрыть...


Вот в этом сама проблема..Преподаватель сделал данную подсказку, но не сказал что за "Входной буфер"...

serfad

Пользователь

Регистрация: 11.03.2014

Сообщения: 254

Рейтинг: 110

serfad

Регистрация: 11.03.2014

Сообщения: 254

Рейтинг: 110

..DS сказал(а):
Вот в этом сама проблема..Преподаватель сделал данную подсказку, но не сказал что за "Входной буфер"...
Нажмите, чтобы раскрыть...

Ну если он о "Буфере обмена" , то зачем его очищать, если при копировании он автоматически освобождается. Если он о, другом буфере, единственное, что пришло в голову это:
Цитата:

cin.clear();
Нажмите, чтобы раскрыть...

serfad

Пользователь

Регистрация: 11.03.2014

Сообщения: 254

Рейтинг: 110

serfad

Регистрация: 11.03.2014

Сообщения: 254

Рейтинг: 110

serfad сказал(а):
Ну если он о "Буфере обмена" , то зачем его очищать, если при копировании он автоматически освобождается. Если он о, другом буфере, единственное, что пришло в голову это:
Нажмите, чтобы раскрыть...

Извиняюсь, не прочел, что язык СИ, что-то подобное должно быть и там.

stealth

Пользователь

Регистрация: 29.02.2012

Сообщения: 1816

Рейтинг: 1093

stealth

Регистрация: 29.02.2012

Сообщения: 1816

Рейтинг: 1093

А зачем использовать scanf вместе с cputs? Обычно пара scanf printf идет. Просто cputs ссылается на адрес в памяти, который передается ему как параметр (буфер), скорее всего этот буфер где-то затирается, и поэтому нужно чистить.
fflush() - сброс буфера

..DS

Пользователь

Регистрация: 17.06.2013

Сообщения: 149

Рейтинг: 43

..DS

Регистрация: 17.06.2013

Сообщения: 149

Рейтинг: 43

serfad сказал(а):
Извиняюсь, не прочел, что язык СИ, что-то подобное должно быть и там.
Нажмите, чтобы раскрыть...


Всё, я разобрался.))

Просто перед вводом текста (case 60: СЮДА; h=add_comp(h,n); n++; break; ) надо было вставить ф-цию fflush(stdin);

Спасибо большое за попытку помочь.)

misterdragon

Пользователь

Регистрация: 15.07.2013

Сообщения: 200

Рейтинг: 238

misterdragon

Регистрация: 15.07.2013

Сообщения: 200

Рейтинг: 238

..DS сказал(а):
Всё, я разобрался.))

Просто перед вводом текста (case 60: СЮДА; h=add_comp(h,n); n++; break; ) надо было вставить ф-цию fflush(stdin);

Спасибо большое за попытку помочь.)
Нажмите, чтобы раскрыть...

Ну удачи тогда со сдачей

..DS

Пользователь

Регистрация: 17.06.2013

Сообщения: 149

Рейтинг: 43

..DS

Регистрация: 17.06.2013

Сообщения: 149

Рейтинг: 43

misterdragon сказал(а):
Ну удачи тогда со сдачей
Нажмите, чтобы раскрыть...


Спасибо большое.)
И Вам удачи.)

NeuHell

Почетный пользователь

Регистрация: 01.12.2012

Сообщения: 4445

Рейтинг: 3526

NeuHell

Регистрация: 01.12.2012

Сообщения: 4445

Рейтинг: 3526

img
Закрыто

Тема закрыта