[CODE C]Đến chỗ nhập họ tên thì ct thoát ra cái vèo??

#include <stdio.h>
#include <conio.h>
#include <string.h>
const int Nmax=100;
typedef char infor1[20];
typedef float infor2;
typedef int infor3;
struct element
{infor1 ht;
infor2 cc;
infor3 cntc;
};
typedef element DS[Nmax];
DS A;
int n;
/*Nguyen mau ham*/
void menu(int &i);
void nhap(DS A,int &n);
void lietke(DS A,int n);
void them(DS A,int &n,int t,infor1 x,infor2 y);
void xoa(DS A,int &n,int t);
int tim(DS A,int n,infor1 x);
void lietke_pt(DS A,int n,int t);
void main()
{clrscr();
int i=1,j;
infor1 x;
infor2 y;
while(i!=0) //thuc hien nhieu nhung cong viec
  {menu(i);
  //printf(" ");
  switch(i)
  { case 0: break;
    case 1: nhap(A,n);break;
    case 2: lietke(A,n);break;
    case 3: them(A,n,2,"Le Them",1.5);break;
    case 4: printf(" Nhap ho ten ");gets(x),gets(x);
        printf(" Nhap chieu cao ");scanf("%f",y);
        printf(" Nhap vi tri muon them ");scanf("%d",&j);
        them(A,n,j,x,y);break;
    case 5: j=tim(A,n,"Le Tim");
        if(j==-1) printf(" Khong co "Le Tim" trong danh sach");
        else lietke_pt(A,n,j);break;
    case 6: printf(" Nhap ho ten SV can tim ");gets(x);gets(x);
        j=tim(A,n,x);
        if(j==-1) printf(" Khong co %s trong danh sach",x);
        else lietke_pt(A,n,j);break;
    case 7: xoa(A,n,2);
    case 8: printf(" Nhap so thu tu SV muon xoa ");scanf("%d",&j);
        xoa(A,n,j);
        break;
    case 9: j=tim(A,n,"Le Xoa");
        if(j==-1) printf(" Khong co "Le Xoa" trong danh sach");
        else xoa(A,n,j);
        break;
    case 10: printf(" Nhap ho ten SV muon xoa ");gets(x);gets(x);
         j=tim(A,n,x);
         if(j==-1) printf(" Khong co %s trong danh sach",x);
        else xoa(A,n,j);break;
        }
    printf(" ");
}
getch();
}
//Dinh nghia ham
void menu(int &i)  //chuyen gia tri i ra ngoai ham main
{printf(" ============================================================");
printf(" 1.Nhap moi danh sach.");
printf(" 2.Liet ke danh sach.");
printf(" 3.Them "Le Them" cao 1m5 vao vi tri thu 2 trong danh sach.");
printf(" 4.Nhap ho ten,chieu cao,vi tri de them vao danh sach.");
printf(" 5.Tim "Le Tim" trong danh sach.");
printf(" 6.Nhap ho ten can tim trong danh sach.");
printf(" 7.Xoa nguoi thu 2 trong danh sach.");
printf(" 8.Nhap so thu tu SV muon xoa khoi danh sach.");
printf(" 9.Tim va xoa "Le Xoa" ra khoi danh sach.");
printf(" 10.Nhap ho ten, tim va xoa nguoi dau tien khoi danh sach.");
printf(" 0.Thoat.");
printf(" =============================================================");
printf(" --------BAN MUON THUC HIEN NHIEM VU NAO??--------- ");
scanf("%d",&i);
}
void nhap(DS A,int &n)
{infor1 x;
int i;
printf("Danh sach gom may SV? ");
scanf("%d",&i);
n=i;
for(i=0;i<n;i++)
  {printf(" SV thu %d ",i);
  printf("      Nhap ho ten ");gets(x);gets(x);
  strcpy(A[i].ht,x);
  printf("      Nhap chieu cao ");scanf("%f",&A[i].cc);
  A[i].cntc=A[i].cc*100-105;
  }
}
void lietke(DS A,int n)
{int i;
printf(" Danh sach...");
for(i=0;i<n;i++)
 printf(" %d.%20s%7.2f%7d",i,A[i].ht,A[i].cc,A[i].cntc);
}
void lietke_pt(DS A,int n,int t)
{if(t>=0&&t<n) {printf("Thong tin nguoi co so thu tu %d la ",t);
        printf("%20s%7.2f%7d",A[t].ht,A[t].cc,A[t].cntc);
        }
}

void them(DS A,int &n,int t,infor1 x,infor2 y)
{int i;
if((n<Nmax)&&(t>=0)&&(t<=n))
{for(i=n-1;i>=t;i--) A[i+1]=A[i];
strcpy(A[t].ht,x);
A[t].cc=y;
A[t].cntc=A[t].cc*100-105;
n++;
}
else printf("Khong the chen duoc!");
}
int tim(DS A,int n,infor1 x)
{int i=0;
while(i<n&&strcmp(A[i].ht,x)) i++;
if(i==n) return -1;
else return i;
}
void xoa(DS A,int &n,int t)
{int i;
if(t>=0&&t<n)
{for(i=t;i<=n;i++) A[i]=A[i+1];
n--;
printf("Da xoa...");
}
else printf("Khong co trong danh sach.");
}





To Van Nam
To Van Nam
Trả lời 14 năm trước

Sau dây là bài chũa:

#include <stdio.h>
#include <conio.h>
#include <string.h>
const int Nmax=100;
typedef char infor1[20];
typedef float infor2;
typedef int infor3;
struct element
{
infor1 ht;
infor2 cc;
infor3 cntc;
};
typedef element DS[Nmax];
DS A;
int n;
/*Nguyen mau ham*/
void menu(int &i);
void nhap(DS A,int &n);
void lietke(DS A,int n);
void them(DS A,int &n,int t,infor1 x,infor2 y);
void xoa(DS A,int &n,int t);
int tim(DS A,int n,infor1 x);
void lietke_pt(DS A,int n,int t);
void main()
{clrscr();
int i=1,j;
infor1 x;
infor2 y;
while(i!=0) //thuc hien nhieu nhung cong viec
{menu(i);
//printf("");
switch(i)
{ case 0: break;
case 1: nhap(A,n);break;
case 2: lietke(A,n);break;
case 3: them(A,n,2,"Le Them",1.5);break;
case 4: printf("Nhap ho ten ");gets(x),gets(x);
printf("Nhap chieu cao ");scanf("%f",y);
printf("Nhap vi tri muon them ");scanf("%d",&j);
them(A,n,j,x,y);break;
case 5: j=tim(A,n,"Le Tim");
if(j==-1) printf("Khong co "Le Tim" trong danh sach");
else lietke_pt(A,n,j);break;
case 6: printf("Nhap ho ten SV can tim ");gets(x);gets(x);
j=tim(A,n,x);
if(j==-1) printf("Khong co %s trong danh sach",x);
else lietke_pt(A,n,j);break;
case 7: xoa(A,n,2);
case 8: printf("Nhap so thu tu SV muon xoa ");scanf("%d",&j);
xoa(A,n,j);
break;
case 9: j=tim(A,n,"Le Xoa");
if(j==-1) printf("Khong co "Le Xoa" trong danh sach");
else xoa(A,n,j);
break;
case 10: printf("Nhap ho ten SV muon xoa ");gets(x);gets(x);
j=tim(A,n,x);
if(j==-1) printf("Khong co %s trong danh sach",x);
else xoa(A,n,j);break;
}
printf("");
}
getch();
}
//Dinh nghia ham
void menu(int &i) //chuyen gia tri i ra ngoai ham main
{printf("============================================================");
printf("1.Nhap moi danh sach.");
printf("2.Liet ke danh sach.");
printf("3.Them "Le Them" cao 1m5 vao vi tri thu 2 trong danh sach.");
printf("4.Nhap ho ten,chieu cao,vi tri de them vao danh sach.");
printf("5.Tim "Le Tim" trong danh sach.");
printf("6.Nhap ho ten can tim trong danh sach.");
printf("7.Xoa nguoi thu 2 trong danh sach.");
printf("8.Nhap so thu tu SV muon xoa khoi danh sach.");
printf("9.Tim va xoa "Le Xoa" ra khoi danh sach.");
printf("10.Nhap ho ten, tim va xoa nguoi dau tien khoi danh sach.");
printf("0.Thoat.");
printf("=============================================================");
printf("--------BAN MUON THUC HIEN NHIEM VU NAO??---------");
scanf("%d",&i);
}
void nhap(DS A,int &n)
{infor1 x;
int i; float tg;
printf("Danh sach gom may SV? ");
scanf("%d",&i);
n=i;
for(i=0;i<n;i++)
{printf("SV thu %d ",i);
printf(" Nhap ho ten ");fflush(stdin);gets(A[i].ht); /*gets(x);*/
/* strcpy(A[i].ht,x); */
printf(" Nhap chieu cao ");scanf("%f",&tg);A[i].cc=tg;
A[i].cntc=A[i].cc*100-105;
}
}
void lietke(DS A,int n)
{int i;
printf("Danh sach...");
for(i=0;i<n;i++)
printf("%d.%20s%7.2f%7d",i,A[i].ht,A[i].cc,A[i].cntc);
}
void lietke_pt(DS A,int n,int t)
{if(t>=0&&t<n) {printf("Thong tin nguoi co so thu tu %d la ",t);
printf("%20s%7.2f%7d",A[t].ht,A[t].cc,A[t].cntc);
}
}

void them(DS A,int &n,int t,infor1 x,infor2 y)
{int i;
if((n<Nmax)&&(t>=0)&&(t<=n))
{for(i=n-1;i>=t;i--) A[i+1]=A[i];
strcpy(A[t].ht,x);
A[t].cc=y;
A[t].cntc=A[t].cc*100-105;
n++;
}
else printf("Khong the chen duoc!");
}
int tim(DS A,int n,infor1 x)
{int i=0;
while(i<n&&strcmp(A[i].ht,x)) i++;
if(i==n) return -1;
else return i;
}
void xoa(DS A,int &n,int t)
{int i;
if(t>=0&&t<n)
{for(i=t;i<=n;i++) A[i]=A[i+1];
n--;
printf("Da xoa...");
}
else printf("Khong co trong danh sach.");
}

thành phần của một cấu trúc mà là kiểu float thì không lấy địa chỉ trực tiếp được vì vậy lệnh

scanf("%f",&A[i].cc); sẽ gây lỗi

Chúc may mắn