Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: tại sao nó báo "parse error before '{'" nhỉ ?

  1. #1
    Ngày gia nhập
    11 2007
    Bài viết
    9

    Mặc định tại sao nó báo "parse error before '{'" nhỉ ?

    mình dùng C Free 3.5.2, lỗi ở ngay dưới void main() :
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<alloc.h>
    4. #include<stdlib.h>
    5. typedef struct HoSo
    6. {
    7.     char ten[30],chucvu[20],trinhdo[20],ngaysinh[15];
    8.     int thamnien,tuoi;
    9.     HoSo *tiep;
    10. };
    11. HoSo NhapDl(HoSo *pA)
    12. {
    13.     HoSo A,*p;
    14.     p=(HoSo *)malloc(sizeof(HoSo));
    15.     char tg1[30],tg2[15],tg3[20];
    16.     printf("Ten : ");gets(tg1);A.ten=tg1;
    17.     printf("Ngay Thang Nam sinh : ");gets(tg2);A.ngaysinh=tg2;
    18.     printf("Tuoi : ");scanf("%d",&A.tuoi);
    19.     printf("Chuc vu hien tai : ");gets(tg3);A.chucvu=tg3;
    20.     printf("Trinh do : ");gets(tg3);A.trinhdo=tg3;
    21.     printf("Tham nien cong tac : ");scanf("%d",&A.thamnien);
    22.     p=&A;
    23.     p->tiep=NULL;
    24.     pA->tiep=p;
    25.     pA=p;
    26. }
    27. void XuatDl(HoSo *p)
    28. {
    29.     printf("Ten : %s",p->ten);
    30.     printf("Ngay sinh : %s",p->ngaysinh);
    31.     printf("Tuoi : %d",p->tuoi);
    32.     printf("Chuc vu hien tai : %s",p->chucvu);
    33.     printf("Trinh do : %s",p->trinhdo);
    34.     printf("Tham nien : %d",p->thamnien);
    35. }
    36. HoSo TimKiem(HoSo *P)/*Cho nay goi toi ham XuatDl*/
    37. {
    38.     HoSo *p;
    39.     int i;
    40.     char kt1[30],kt2[15],kt3[20];
    41.     p=P;
    42.     printf("Ban muon tim kiem thong tin gi ? Bam mot trong cac so de chon : \n");
    43.     printf("1. Tim Ten.\n2. Tim Ngay sinh.\n3. Tim Tuoi.\n4. Tim Chuc vu.\n5.Tim Trinh do.\n6. Tim Tham nien cong tac.");
    44.     scanf ("%d",&i);
    45.             switch(i)
    46.                         {
    47.                             case 1:
    48.                                 {
    49.                                     printf("Cho biet Ten can tim : ");
    50.                                     gets(kt1);
    51.                                     while(p->tiep!=NULL)
    52.                                             if(p->ten==kt1)
    53.                                             {
    54.                                                 XuatDl(p);
    55.                                                 p=p->tiep;
    56.                                                 continue;
    57.                                             };
    58.                                 }
    59.                                 break;
    60.                             case 2:
    61.                                 {
    62.                                     printf("Cho biet Ngay sinh can tim : ");
    63.                                     gets(kt2);
    64.                                     while(p->tiep!=NULL)
    65.                                         if(p->ngaysinh==kt2)
    66.                                         {
    67.                                             XuatDl(p);
    68.                                             p=p->tiep;
    69.                                         };
    70.                                 }
    71.                                 break;
    72.                             case 3:
    73.                                 {
    74.                                     printf("Cho biet Tuoi can tim : ");
    75.                                     scanf("%d",&i);
    76.                                     while(p->tiep!=NULL)
    77.                                         if(p->tuoi==i)
    78.                                         {
    79.                                             XuatDl(p);
    80.                                             p=p->tiep;
    81.                                         }
    82.                                 break;
    83.                             case 4:
    84.                                 {
    85.                                     printf("Cho biet Chuc vu can tim : ");
    86.                                     gets(kt3);
    87.                                     while(p->tiep!=NULL)
    88.                                         if(p->chucvu==kt3)
    89.                                         {
    90.                                             XuatDl(p);
    91.                                             p=p->tiep;
    92.                                         };
    93.                                 }
    94.                                 break;
    95.                             case 5:
    96.                                 {
    97.                                     printf("Cho biet Trinh do can tim : ");
    98.                                     gets(kt3);
    99.                                     while(p->tiep!=NULL)
    100.                                         if(p->chucvu==kt3)
    101.                                         {
    102.                                             XuatDl(p);
    103.                                             p=p->tiep;
    104.                                         };
    105.                                 }
    106.                                 break;
    107.                             case 6:
    108.                                 {
    109.                                     printf("Cho biet Tham nien can tim : ");
    110.                                     scanf("%d",&i);
    111.                                     while(p->tiep!=NULL)
    112.                                         if(p->thamnien==i)
    113.                                         {
    114.                                             XuatDl(p);
    115.                                             p=p->tiep;
    116.                                         };
    117.                                 }
    118.                                 break;
    119.                             default:
    120.                                 printf("Bye bye !");
    121.                                 break;
    122.                         };
    123. }
    124. void main()
    125. {     /*thông báo lỗi ở chỗ này này, mong các bạn chỉ giáo*/
    126.     int n,i;
    127.     char c;
    128.     HoSo *pdau,*p1;
    129.     pdau=NULL;p1=NULL;
    130.     printf("Co muon tao ho so khong ? (c/k) ");getchar(c);
    131.     while(c=='c')
    132.     {
    133.         if((pdau==NULL)&&(p1==NULL))
    134.         {
    135.         NhapDl(p1);
    136.         pdau=p1;
    137.         }
    138.         else NhapDl(p1);
    139.         printf("Co muon nhap tiep ho so khong ? (c/k) ");getchar(c);
    140.     };
    141.     XuatDl(pdau);
    142.     printf("Co muon tim kiem gi trong danh sach vua lap ? (c/k) ");getchar(c);
    143.     if(c=='c') TimKiem(pdau);
    144. }




    Note: Vui lòng cho code vào tag code, đọc nội quy để biết thêm chi tiết.Vi phạm lần sau mình sẽ xóa bài mà không cần báo trước.
    Đã được chỉnh sửa lần cuối bởi comeonbaby : 06-04-2008 lúc 06:54 PM. Lý do: Nhắc nhở.

  2. #2
    Ngày gia nhập
    03 2008
    Bài viết
    22

    typedef struct HoSo
    {
    char ten[30],chucvu[20],trinhdo[20],ngaysinh[15];
    int thamnien,tuoi;
    HoSo *tiep;
    };
    theo mình thì phải bỏ typedef đi bạn ah
    printf("Bye bye !");
    break;
    };
    chỗ này bỏ ";" sau } đi chứ???
    PS: bạn ko cho code và thẻ code rùi lại bị cảnh cáo cho coi
    Đã được chỉnh sửa lần cuối bởi thanhnam46 : 06-04-2008 lúc 05:20 PM.
    NO

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    224

    bạn nè , nên để code vào tag code c đi , mình sẽ giúp .

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    153

    Uhm mình chưa coi kỹ qua nhưng có vấn đề thế này, một là bạn phải đặt tên sau khi đã typedef, nếu không thì thôi nên bỏ đi, vì bạn chạy trên môi trường singly-thread nên nó không có lỗi chứ nếu trùng compiler chạy trên win hoặc các cái đa luồng thì sẽ có lỗi ngay, còn nữa cái tên cấu trúc bạn phải để là struct HoSo chứ không được phép đặt là HoSo không thôi vì đây là chương trình C, nếu save dưới đuôi C++ thì ok còn C thì không thể vì C không hỗ trợ tính kế thừa.Vì thế câu lệnh này là sai.

    C Code:
    1. typedef struct HoSo
    2. {
    3.     char ten[30],chucvu[20],trinhdo[20],ngaysinh[15];// code nên viết tách ra
    4. //cho dễ nhìn, không nên để tất cả trên 1 dòng.
    5.     int thamnien,tuoi;
    6.     HoSo *tiep;// struct HoSo not HoSo
    7. };// tên sau khi đã typedef
    ttecak ?

  5. #5
    Ngày gia nhập
    11 2007
    Bài viết
    9

    mình thử như các bạn nói rồi nhưng mà vẫn không được, phần trên nó dịch bình thường, đúng lỗi chỗ này thôi :
    C Code:
    1. void main()
    2. {    /*nó báo lỗi ở chỗ này, đúng dòng này*/
    3.     int n,i;
    4.     char c;
    5.     HoSo *pdau,*p1;
    6.     pdau=NULL;p1=NULL;
    7.     printf("Co muon tao ho so khong ? (c/k) ");getchar(c);
    mà thêm nữa, khi xóa dong khai báo int n,i đi thì nó lại báo lỗi biến c chưa
    được khai báo.

  6. #6
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Mặc định tại sao nó báo "parse error before '{'" nhỉ ?

    Sai lung tung cả. Nói chung là nhìn qua thấy lỗi nhiều lắm.

    Bạn định nghĩa kiểu struct như thế e là không ổn, xem lại syntax của typedef. HoSo *tiep là cái gì nào?

    Một cấu trúc tự tham chiếu, bạn khai báo là HoSo A, *p; có ổn không? Xem lại đi bạn ơi.

    Hàm NhapDl khai báo trả về kiểu HoSo? Giá trị trả về của hàm là cái gì? sao không thấy?

    Hàm TimKiem cũng vậy, giá trị trả về là gì? Thiếu một dấu } ở hàm này, kiểm tra lại xem nào?

    printf("Co muon tao ho so khong ? (c/k) ");getchar(c); // Xem lại hàm getchar() xem nào? làm gì có getchar sử dụng thế này?

    Nói chung là code rối tung, rối mù, comments không có. Bó tay thôi bạn ah?
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  7. #7
    Ngày gia nhập
    11 2007
    Bài viết
    9

    Cảm ơn bạn Dreaminess đã chỉ giúp mình chỗ sai.

  8. #8
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    - Không có free, code design yếu quá, toàn pass tham trị, khi pass pointer đừng có nghĩ có dấu * sao là đúng, pass node thì phải pass *& hoặc *.
    - Tui dựa vào bài của cậu, đặt lại 1 hướng khác cậu xem thử coi sao ?
    C Code:
    1. #include <cstdio>
    2. #include <cstdlib>
    3. #include <cstring>
    4.  
    5. struct data{
    6.   int d_int;
    7.   char d_char[30];
    8. };
    9.  
    10. struct list{
    11.   data l_data;
    12.   struct list* next;
    13. };
    14.  
    15. /*
    16.  - urgly global variable
    17. */
    18. typedef list* LINK;
    19. LINK l_head, l_iter;
    20.  
    21. void make_some_data(data& ss){
    22.   fprintf(stdout, "\n * a string : ");
    23.   fgets(ss.d_char, 29, stdin);
    24.   fprintf(stdout, "\n * an int : ");
    25.   fscanf(stdin, "%d", &ss.d_int);
    26.   fflush(stdin);
    27. }
    28.  
    29. void create_a_node(){
    30.   LINK l_creator = (list*)malloc(sizeof(list));
    31.   make_some_data(l_creator->l_data);
    32.   if(NULL == l_head)
    33.     l_head = l_iter = l_creator;
    34.   else{
    35.     l_iter = l_head;
    36.     while(l_iter->next != NULL){
    37.       l_iter = l_iter->next;
    38.     }
    39.     l_iter->next = l_creator;
    40.     l_iter = l_creator;
    41.   }
    42.   l_iter->next = NULL;
    43. }
    44.  
    45. void display_list(){
    46.     if(NULL == l_head)
    47.     return;
    48.  
    49.   l_iter = l_head;
    50.   do{
    51.     fprintf(stdout, "\n - string %s", l_iter->l_data.d_char);
    52.     fprintf(stdout, "\n - int %d", l_iter->l_data.d_int);
    53.     l_iter = l_iter->next;
    54.   }
    55.     while(l_iter != NULL);
    56. }
    57.  
    58. void destroy(LINK v){
    59.   if(v != NULL){
    60.     fprintf(stdout, "\n...freeing %d ", v->l_data.d_int);
    61.     fprintf(stdout, "\n...freeing %s ", v->l_data.d_char);
    62.     destroy(v->next);
    63.         free(v);
    64.     }
    65. }
    66.  
    67. int main(){
    68.   create_a_node();
    69.   create_a_node();
    70.   create_a_node();
    71.  
    72.   display_list();
    73.   destroy(l_iter);
    74.   l_iter = 0;
    75.   l_head = 0;
    76.   return 0;
    77. }

    void main()
    { /*nó báo lỗi ở chỗ này, đúng dòng này*/
    int n,i;
    char c;
    HoSo *pdau,*p1;
    pdau=NULL;p1=NULL;
    printf("Co muon tao ho so khong ? (c/k) ");getchar(c);
    Cách tạo 1 menu đơn giản yes no thì dùng như sau :
    C Code:
    1. char return_user_answer(){
    2.   char yes_or_no;
    3.   fprintf(stdout, "\n ...continue [y/n] ?");
    4.   scanf(" %c", &yes_or_no);
    5.   fflush(stdin);
    6.   return yes_or_no;
    7. }
    8.  
    9. int main(){
    10.  
    11.   char keystrokes;
    12.   do{
    13.  
    14.     ..
    15.     ..
    16.     ..
    17.  
    18.   }while(keystrokes =! 'N' || keystrokes != 'n');
    19.  
    20.   return 0;
    21. }
    Đã được chỉnh sửa lần cuối bởi rox_rook : 08-04-2008 lúc 10:05 AM.

  9. #9
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Đây là làm theo ý của cậu, coi cho kĩ lại, thắc mắc chỗ nào thì hỏi liền, đọc code cậu tui thấy cậu không hiểu giữa con trỏ, tham chiếu và thậm chí hàm nữa, nếu.
    - * có 1 ý nghĩa : con trỏ tới gì đó
    - & có 2 ý nghĩa : tham chiếu và địa chỉ.
    Nếu vẫn còn thắc mắc tại sao -> post hỏi !
    C Code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4.  
    5. struct HoSo{
    6.   char h_ten[30];
    7.   int h_tuoi;
    8.   HoSo *tiep;
    9. };
    10.  
    11. void nhap_du_lieu(HoSo*& pA){
    12.   fprintf(stdout, "\n - ten : ");
    13.   fgets(pA->h_ten, 29, stdin);
    14.  
    15.   fprintf(stdout, "\n - tuoi : ");
    16.   fscanf(stdin, "%d", &(pA->h_tuoi));
    17.   fflush(stdin);
    18. }
    19.  
    20. void tao_du_lieu(HoSo*& p_dau, HoSo*& h_tai){
    21.   HoSo* h_tao = (HoSo*)malloc(sizeof(HoSo));
    22.   nhap_du_lieu(h_tao);
    23.   if(NULL == p_dau)
    24.     p_dau = h_tai = h_tao;
    25.  
    26.   else{
    27.     h_tai = p_dau;
    28.     while(h_tai->tiep != NULL){
    29.       h_tai = h_tai->tiep;
    30.     }
    31.     h_tai->tiep = h_tao;
    32.     h_tai = h_tao;
    33.   }
    34.   h_tai->tiep = NULL;
    35. }
    36.  
    37. void xuat_du_lieu(const HoSo* p_dau, const HoSo* h_tai){
    38.   if(NULL == p_dau)
    39.     return;
    40.   fprintf(stdout, "-- DANH SACH BAO GOM --\n");
    41.   h_tai = p_dau;
    42.   do{
    43.     fprintf(stdout, "---> ten %s   \n", h_tai->h_ten);
    44.     fprintf(stdout, "---> tuoi %d  \n", h_tai->h_tuoi);
    45.     h_tai = h_tai->tiep;
    46.   }
    47.   while(h_tai != NULL);
    48. }
    49.  
    50. void xuat_bang_lua_chon(){
    51.   printf("\n Ban muon tim kiem thong tin gi ?");
    52.   printf("\n Bam mot trong cac so de chon : ");
    53.   printf("\n 1. Tim Ten.");
    54.   printf("\n 2. Tim Tuoi.");
    55. }
    56.  
    57. void tim_kiem_danh_sach(const HoSo* p_dau, const HoSo* h_tai)/*Cho nay goi toi ham XuatDl*/
    58. {
    59.   int lua_chon;
    60.   xuat_bang_lua_chon();
    61.  
    62.   char ten_tam[30];
    63.   int tuoi_tam;
    64.  
    65.   fscanf(stdin, "%d", &lua_chon);
    66.   fflush(stdin);
    67.  
    68.   switch(lua_chon)
    69.   {
    70.     case 1 :
    71.       printf("Cho biet ten can tim : ");
    72.       fgets(ten_tam, 30, stdin);
    73.  
    74.       h_tai = p_dau;
    75.       while(h_tai != NULL){
    76.         if(strcmp(h_tai->h_ten, ten_tam)){
    77.           printf(" tim thay !");
    78.           return;
    79.         }
    80.         h_tai = h_tai->tiep;
    81.       }
    82.       printf(" ...ko tim thay !!");
    83.       break;
    84.  
    85.     case 2 :
    86.       printf("Cho biet tuoi can tim : ");
    87.       fscanf(stdin, "%d", &tuoi_tam);
    88.  
    89.       while(h_tai != NULL){
    90.         if(h_tai->h_tuoi == tuoi_tam){
    91.           printf(" tim thay !");
    92.           return;
    93.         }
    94.         h_tai = h_tai->tiep;
    95.       }
    96.       printf(" ...ko tim thay !!");
    97.       break;
    98.   }
    99. }
    100.  
    101. void xoa_du_lieu(HoSo* v){
    102.   if(v != NULL){
    103.     fprintf(stdout, "\n...freeing %d ", v->h_tuoi);
    104.     fprintf(stdout, "\n...freeing %s ", v->h_ten);
    105.     xoa_du_lieu(v->tiep);
    106.     free(v);
    107.   }
    108. }
    109.  
    110. char return_user_answer(){
    111.   char yes_or_no;
    112.   fprintf(stdout, "\n ...continue [y/n] ?");
    113.   fscanf(stdin, " %c", &yes_or_no);
    114.   fflush(stdin);
    115.   return yes_or_no;
    116. }
    117.  
    118.  
    119. int main(){
    120.   char key_strokes;
    121.   HoSo *p_dau, *h_tai;
    122.   p_dau = NULL;
    123.   h_tai = NULL;
    124.  
    125.   do{
    126.     tao_du_lieu(p_dau, h_tai);
    127.     key_strokes = return_user_answer();
    128.   }while(key_strokes == 'y' || key_strokes == 'Y');
    129.  
    130.   xuat_du_lieu(p_dau, h_tai);
    131.  
    132.   tim_kiem_danh_sach(p_dau, h_tai);
    133.  
    134.   fprintf(stdout, "\n\n...XOA DANH SACH --\n");
    135.   xoa_du_lieu(p_dau);
    136.  
    137.   return 0;
    138. }

  10. #10
    Ngày gia nhập
    11 2007
    Bài viết
    9

    C có cho phép kiểu trả về của một hàm là con trỏ không ? Các bạn giải thích giúp với.

Các đề tài tương tự

  1. Lỗi"error C2275: 'T' : illegal use of this type as an expression" khi dùng "list<T>::iterator it"
    Gửi bởi doicanhden trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 6
    Bài viết cuối: 19-01-2012, 01:59 AM
  2. Trả lời: 1
    Bài viết cuối: 01-12-2011, 07:32 PM
  3. Lỗi : error LNK2005: "extern "C" void __cdecl PropVariantInit(struct tagPROPVARIANT *)" (?PropVariantInit@@$$J0YAXPA
    Gửi bởi truongvu trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 14-09-2011, 02:52 AM
  4. Bài tập C lỗi "syntax error" trong file định dạng lại kiểu dữ liệu "types.h"
    Gửi bởi grandthorn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 10-09-2011, 07:29 AM
  5. gỡ lỗi : "error LINK2019" và "error LINK 1120"
    Gửi bởi princehai trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 03-07-2011, 06:47 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn