aris mihadjami Ответов: 1

Кто-нибудь может мне помочь? Почему этот код является ошибкой :(


#include <stdio.h>
#include <conio.h>
#define MAX 6
typedef struct{
int data[MAX];
int head;
int tail;
} Queue;
Queue antrian;
void Create(){
antrian.head=antrian.tail=-1;
}

int IsEmpty(){
if(antrian.tail==-1)
return 1;
else
return 0;
}

int IsFull(){
if (antrian.tail==MAX-1) return 1;
else return 0;
}

void Enqueue(int data){
if(IsEmpty()==1){
antrian.head=antrian.tail=0;
antrian.data[antrian.tail]=data;

printf("\t Silahkan Masuk !! \n",antrian.data[antrian.tail]);
void Tampil();
{
if(IsEmpty()==0){
for(int i=antrian.head;i<=antrian.tail;i++){
printf("%d ",antrian.data[i]);
}
}else printf("data kosong!");
};
}else
if(IsFull()==0){
antrian.tail++;
antrian.data[antrian.tail]=data;
printf("\t Silahkan Masuk !! \n",antrian.data[antrian.tail]);
}

}

int Dequeue(){
int i;
int e = antrian.data[antrian.head];
for(i=antrian.head;i<=antrian.tail-1;i++){
antrian.data[i]= antrian.data[i+1];
}
antrian.tail--;
return e;
}


void clear(){
antrian.head=antrian.tail=-1;
printf("Data Clear");
}
void Tampil()
{ int jum;
jum=0;

if(IsEmpty()==0){
for(int i=antrian.head;i<=antrian.tail;i++){
jum++;

printf("\n| %d |",antrian.data[i]);}
printf("\njumlah yang mengantri saat ini %i orang",jum);
}else printf("Data Kosong!\n");}

//sebagai nasabah
void nasabah()
{
int data;
char lagi;
do{
clrscr();
printf("\t+=================================+\n");
printf("\t| menu nasabah |\n");
printf("\t+=================================|\n");
printf("\t| tekan (a) untuk masukkan data |\n");
printf("\t| tekan (b) melihat data antrian |\n");
printf("\t| tekan (x) keluar |\n");
printf("\t+=================================|\n");
printf("pilihan : "); scanf("%c",&lagi);
if((lagi=='x') || (lagi=='X'))
{ printf("terima kasih\n");

break;
}

switch(lagi)
{
case 'a':
printf("masukkan data: "); scanf("%d",&data);
Enqueue(data);
break;
case 'b': Tampil();
break;

}getch();
} while(lagi !='x');
getche();
}

//memasukkan password
void password()
{
char nama[20], id[10], password[4];
int i;
{
clrscr();

atas:
clrscr();
printf("\t\t+===============================================+\n");
printf("\t\t| S E L A M A T D A T A N G |\n");
printf("\t\t| jika anda admin dari teller |\n");
printf("\t\t|Silahkan masukkan User Name & 3 digit Password |\n");
printf("\t\t+===============================================+\n");
printf("\t\t UserName : ") ; cin>>nama;
printf("\t\t No. Identitas : "); cin>>id;
printf("\t\t Password : ") ;
for(i=0; i<=2; i++)
{password[i]=getche(); printf("\bX");
}
printf("\n\t\t+=============================================+\n");
if (strcmp(password,"aaa")==0)
{ printf("\n\n\t\t Anda Masuk Sebagai TEllER\n");
printf("\t\t User : %s \n",nama);
printf("\t\t No. Identitas : %s\n",id);
printf("\n\n\t\tTekan Sembarang tombol untuk ke menu teller..!");
goto bawah;
}
else
{
printf("\t\t\tpassword salah bro...hahaaa\n");
printf("\t\tketik sembarang tombol untuk kembali ke menu: ");
goto atas;

}
bawah:
getch();
}
}

void teller()
{char menu;
password();
do{
clrscr();
printf("\t\t+=================================+\n");
printf("\t\t| menu pilihan untuk TELLER |\n");
printf("\t\t+=================================+\n");
printf("\t\t| tekan (a) untuk menghapus data |\n");
printf("\t\t| tekan (b) melihat data antrian |\n");
printf("\t\t| tekan (c) untuk mereset |\n");
printf("\t\t| tekan (x) untuk keluar |\n");
printf("\t\t+=================================+\n");
printf("pilihan : "); scanf("%c",&menu);
if((menu=='x') || (menu=='X'))
{ printf("terima kasih\n");

break;
}

switch(menu)
{
case 'a': printf("Elemen yang keluar : %d",Dequeue());
break;
case 'b': Tampil();
break;
case 'c': clear();
break;
}getch();
} while(menu !='x');

}

void main(){
char pil;


Create();
do{
clrscr();
fflush(stdin);
printf("\t\t+=====================================+\n");
printf("\t\t| Bank Republik Indonesia|\n");
printf("\t\t| jalan Teuku Umar |\n");
printf("\t\t| Bali |\n");
printf("\t\t+=====================================+\n");
printf("\t\t| tekan (n) untuk Nasabah |\n");
printf("\t\t| tekan (t) untuk Teller |\n");
printf("\t\t| tekan (k) keluar dari program |\n");
printf("\t\t+=====================================+\n");
printf("pilihan : "); scanf("%c",&pil);
if((pil=='k') || (pil=='k'))
{ printf("terima kasih");
break;
}

switch(pil)
{
case 'n': nasabah();
break;
case 't': teller();
break;

}

}while(pil!='k');
}


Что я уже пробовал:

кто-нибудь может мне помочь ? Почему этот код является ошибкой ?

0x01AA

А ошибка есть?
Ошибка компиляции или вы не получаете ожидаемого результата?

aris mihadjami

когда я выполняю ошибку, возникает "cin >> name;" эта ошибка

0x01AA

И что это за сообщение об ошибке?
Делает ли mabye ошибку только в том случае, если вы вводите более 20 символов? Если да попробуйте это cin.getline(name, sizeof(name));

aris mihadjami

Когда я хочу скомпилировать n run, возникает ошибка в разделе "cin>>name;"

0x01AA

Я сдаюсь, извини...

aris mihadjami

хорошо :) но спасибо Вам за помощь :)

0x01AA

Добро пожаловать :)
Рад видеть, что вы получили ответ ;)

Richard MacCutchan

Вы не можете использовать имя массива в операторе cin. Ваш код очень запутан, и смешивание cin/cout с printf/scanf делает его еще хуже. Выберите C или C++, а не оба варианта.

aris mihadjami

да, я его починил, спасибо за совет :)

1 Ответов

Рейтинг:
6

OriginalGriff

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

int IsEmpty(){
if(antrian.tail==-1)
return 1;
else
return 0;
}
int IsEmpty(){
   if(antrian.tail==-1)
      return 1;
   else
      return 0;
}
int IsEmpty()
   {
   if(antrian.tail==-1)
      {
      return 1;
      }
   else
      {
      return 0;
      }
   }
Вот вам подсказка: это не первый случай ...
Отступ помогает каждому увидеть, что происходит более четко: где начинаются и заканчиваются функции, что находится - и чего нет - внутри объекта. struct, как работает поток кода.
Так что выбирай стиль отступа[^] и придерживайтесь его. (Я люблю Уайтсмитов, но это не всем по вкусу) Это сделает ваше кодирование намного проще, как только вы привыкнете к этой идее. И по крайней мере пока вы начинаете, всегда используйте фигурные скобки для кода в if, else или что-то подобное , даже если это одна строка: слишком легко что-то пропустить, если вы этого не сделаете:
if (a == b) 
   c = 2; d =3;
это не то же самое, что
if (a == b)
   { 
   c = 2; d =3;
   }
Или еще лучше
if (a == b)
   { 
   c = 2; 
   d =3;
   }


И забыть labelс, забудь goto - притворись, что они даже не знают. существовать в течение нескольких лет - ни один код, который вы собираетесь написать, не будет нуждаться в нем, есть множество способов зацикливаться, которые не заставят людей смеяться над вашим кодом или (в крайнем случае) бить вас клюшкой, пока кровь не выйдет из ваших ушей.

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