Follow us on...
Follow us on Facebook

Garagames - Game bài mượt nhất trên Android

Báo Mới trên Android - Ứng dụng đọc báo miễn phí được chờ đợi nhất năm 2013

FTECH.VN : VPS giá rẻ nhất Việt Nam - Chỉ từ 200k/tháng

Giới thiệu VNZ Install cho iOS - hơn 10 000 game & ứng dụng miễn phí cho iPhone và iPad

kết quả từ 1 tới 4 trên 4
  1. #1
    ben_tennyson_fan's Avatar
    ben_tennyson_fan vẫn chưa có mặt trong diễn đàn Rìu Vàng
    Tham gia
    Jul 2009
    Đến từ
    NTSD + V-Z Forum
    Bài
    679
    Cảm ơn
    945
    Điểm
    592/199 bài viết

    Default Lỗi khi nhập dữ liệu

    Mình mới học C, đang tập làm những bài cơ bản.
    Đề là thế này: Định nghĩa 1 dãy cấu trúc có thể được dùng làm danh bạ điện thoại, gồm có tên, địa
    chỉ, số điện thoại, với số mẫu tin tối đa là 40. Viết chương trình quản lý danh bạ điện thoại có các chức năng: nhập thông số, thêm danh bạ, in toàn bộ danh bạ...
    mình viết code thế này
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    
    #define MAX 40
    
    struct phone_record
    {
           char ten[40];
           char d_c[100];
           char dt[12];
    };
    
    phone_record danhba[MAX];
    
    void in(int);
    void add(int,int);
    void out(int);
    void out_fil(int);
    
    void in(int a)
    {
         int i;
         for(i=0;i<a;++i)
         {
            printf("Nhap thong tin nguoi thu %d:\n",i+1);
            printf("Ten: "); gets(danhba[i].ten);
            printf("Dia chi: "); gets(danhba[i].d_c);
            printf("So dien thoai: "); gets(danhba[i].dt);
         }
    }
    
    void add(int a,int n)
    {
         int i;
         for(i=a;i<a+n;++i)
         {
            printf("Nhap them danh ba nguoi thu %d\n",i+1);
            printf("Ten: "); gets(danhba[i].ten);
            printf("Dia chi: "); gets(danhba[i].d_c);
            printf("So dien thoai: "); gets(danhba[i].dt);
         }
    }
    
    void out(int a)
    {
         int i;
         for(i=0;i<a;++i)
         {
            printf("\n--Nguoi thu %d--\n",i+1);
            printf("Ten: %s\n",danhba[i].ten);
            printf("Dia chi: %s\n",danhba[i].d_c);
            printf("So dien thoai: %s\n",danhba[i].dt);
         }
    }
    
    int main(void)
    {
        int n, c, a;
        printf("----------------------------------------\n");
        printf("- CHUONG  TRINH  DANH  BA  DIEN  THOAI -\n");
        printf("----------------------------------------\n");
        printf("\n--Nhap Du Lieu--\n");
        printf("Ban muon danh ba chua bao nhieu nguoi (it hon 40): ");
        scanf("%d",&n);
        in(n);
        tt: 
        printf("\n\n1. Them danh ba\n");
        printf("2. In Toan Bo Danh Ba\n");
        printf("3. Thoat\n");
        printf("Nhap lua chon cua ban: "); scanf("%d",&c);
        switch(c)
        {
           case 1: printf("Nhap so luong danh ba muon them vao: "); scanf("%d",&a); add(n,a); n=n+a; goto tt;
           case 2: out(n); goto tt;
           case 3: goto thoat;
           default: printf("Ma sai!"); goto tt;
        }
        thoat:;
    }
    Nhưng khi nhập dữ liệu vào thì ở người đầu tiên không thể nhập tên được:


    Vậy là sao hở mấy pro?
    GFX-My love

  2. #2
    tuichua's Avatar
    tuichua vẫn chưa có mặt trong diễn đàn Rìu Sắt
    Tham gia
    Aug 2011
    Bài
    150
    Cảm ơn
    28
    Điểm
    36/28 bài viết

    Default

    mình đã chạy thử nhưng cũng không biết là lỗi gì
    khi sửa hết gets thành scanf thì lại đúng
    Code:
    void in(int a) {
        int i;
        for(i=0;i<a;++i) {
            printf("Nhap thong tin nguoi thu %d :\n",i+1);
            printf("Ten : ");
            scanf("%s",&danhba[i].ten);
            printf("Dia chi : ");
            scanf("%s",&danhba[i].d_c);
            printf("So dien thoai : ");
            scanf("%s",&danhba[i].dt);
        }
    }
    Forever Alone

  3. Có 1 thành viên cảm ơn tuichua cho bài viết này:
    ben_tennyson_fan (02-08-2012)

  4. #3
    giaicuu_505_1412's Avatar
    giaicuu_505_1412 vẫn chưa có mặt trong diễn đàn Rìu Bạc
    Tham gia
    Jun 2009
    Đến từ
    Hà Nội
    Bài
    374
    Cảm ơn
    10
    Điểm
    121/104 bài viết

    Default

    chỗ case 1 sau khi nhập giá trị a thì cần giải phóng bộ đệm ký tự để ko bị trôi dòng như TH đang bị bằng lệnh
    Code:
    fflush(stdin);
    SV CNTT ra trường thất nghiệp cần tìm việc làm

  5. Có 1 thành viên cảm ơn giaicuu_505_1412 cho bài viết này:
    ben_tennyson_fan (02-08-2012)

  6. #4
    ben_tennyson_fan's Avatar
    ben_tennyson_fan vẫn chưa có mặt trong diễn đàn Rìu Vàng
    Tham gia
    Jul 2009
    Đến từ
    NTSD + V-Z Forum
    Bài
    679
    Cảm ơn
    945
    Điểm
    592/199 bài viết

    Default

    Trích tuichua View Post
    mình đã chạy thử nhưng cũng không biết là lỗi gì
    khi sửa hết gets thành scanf thì lại đúng
    Code:
    void in(int a) {
        int i;
        for(i=0;i<a;++i) {
            printf("Nhap thong tin nguoi thu %d :\n",i+1);
            printf("Ten : ");
            scanf("%s",&danhba[i].ten);
            printf("Dia chi : ");
            scanf("%s",&danhba[i].d_c);
            printf("So dien thoai : ");
            scanf("%s",&danhba[i].dt);
        }
    }
    Nhưng nếu dùng scanf thì nhập chuỗi tên sẽ ko nhập được phần sau dấu cách đấy bác =.="

    Trích giaicuu_505_1412 View Post
    chỗ case 1 sau khi nhập giá trị a thì cần giải phóng bộ đệm ký tự để ko bị trôi dòng như TH đang bị bằng lệnh
    Code:
    fflush(stdin);
    tks bạn, fix được rồi
    Thay đổi nội dung bởi ben_tennyson_fan; 02-08-2012 lúc 16:59.
    GFX-My love

 

 

Quyền sử dụng

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