Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Cho em hỏi bài này sai ở chỗ nào ạ?

  1. #1
    Ngày gia nhập
    10 2013
    Bài viết
    0

    Mặc định Cho em hỏi bài này sai ở chỗ nào ạ?

    #include<stdio.h>
    #include<string.h>

    struct hoso
    {
    char hoten[40];
    float diem;
    char loai[10];
    } hs[10];

    int main()
    {
    int i,n;
    printf("Nhap so ho so: "); scanf("%d \n", &n);
    for (i=0;i<n;i++)
    {
    fflush(stdin);
    printf("Nhap ho ten nguoi thu %d: \n", i+1); gets(hs[i].hoten);
    printf("Nhap diem nguoi thu %d: \n", i+1); scanf("%d \n", &hs[i].diem);
    }
    for (i=0;i<n;i++)
    if (hs[i].diem>8) hs[i].loai="Gioi"
    else if (hs[i].diem>6) hs[i].loai="Kha"
    else if (hs[i].diem>4) hs[i].loai="Trung binh"
    else hs[i].loai="Khong dat";
    printf("XEP LOAI VAN HOA \n");
    printf("%-15s %-5s %-10s \n", "HO VA TEN", "DIEM" "XEP LOAI");
    for (i=0;i<n;i++)
    printf("%-15s %-5d %-10s", hs[i].hoten, hs[i].diem, hs[i].loai);
    return 0;
    }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    09 2014
    Nơi ở
    Thành phố Hồ Chí Minh
    Bài viết
    2

    Trích dẫn Nguyên bản được gửi bởi zknight Xem bài viết
    C Code:
    1. #include<stdio.h>
    2. #include<string.h>
    3.  
    4. struct hoso
    5. {
    6.     char hoten[40];
    7.     float diem;
    8.     char loai[10];
    9. } hs[10];
    10.  
    11. int main()
    12. {
    13.     int i,n;
    14.     printf("Nhap so ho so: "); scanf("%d \n", &n);
    15.     for (i=0;i<n;i++)
    16.     {
    17.         fflush(stdin);
    18.         printf("Nhap ho ten nguoi thu %d: \n", i+1);  gets(hs[i].hoten);
    19.         printf("Nhap diem nguoi thu %d: \n", i+1); scanf("%d \n", &hs[i].diem);
    20.     }
    21.     for (i=0;i<n;i++)
    22.         if (hs[i].diem>8)  hs[i].loai="Gioi"
    23.             else if (hs[i].diem>6) hs[i].loai="Kha"
    24.                 else if (hs[i].diem>4) hs[i].loai="Trung binh"
    25.                     else hs[i].loai="Khong dat";
    26.     printf("XEP LOAI VAN HOA \n");
    27.     printf("%-15s %-5s %-10s \n", "HO VA TEN", "DIEM" "XEP LOAI");
    28.     for (i=0;i<n;i++)
    29.         printf("%-15s %-5d %-10s", hs[i].hoten, hs[i].diem, hs[i].loai);
    30.     return 0;
    }
    Vì thành phần diem là kiểu float nên không thể dùng phép lấy địa chỉ như thông thường (dòng 19) mà phải dùng biến trung gian để nhập (trường hợp kiểu nguyên thì sử dụng được). Tạm thời chỉ phát hiện ra như thế.

  3. #3
    Ngày gia nhập
    10 2013
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi vancanh2095 Xem bài viết
    Vì thành phần diem là kiểu float nên không thể dùng phép lấy địa chỉ như thông thường (dòng 19) mà phải dùng biến trung gian để nhập (trường hợp kiểu nguyên thì sử dụng được). Tạm thời chỉ phát hiện ra như thế.
    theo em đổi thành scanf("%f") vẫn đc mà

  4. #4
    Ngày gia nhập
    08 2014
    Bài viết
    12

    chưa tính phẩy lung tung thì khai báo hs[10] nhưng ko có yêu cầu khi nhập n (<=10)
    Học thiết kế website, lập trình website, thiết kề đồ họa Photoshop, Illustrator tại Hà Nội | www.zonotek.vn | 043.5122.789

  5. #5
    Ngày gia nhập
    09 2014
    Nơi ở
    Thành phố Hồ Chí Minh
    Bài viết
    2

    Trích dẫn Nguyên bản được gửi bởi zknight Xem bài viết
    theo em đổi thành scanf("%f") vẫn đc mà
    Theo mình biết thì sẽ có lỗi nhưng cũng không chắc. Bạn thử kiểm tra trên máy xem sao. Thông thường khi nhập dữ liệu cho các thành phần của cấu trúc, người ta thường nhập gián tiếp chứ ít khi nhập trực tiếp.

  6. #6
    Ngày gia nhập
    04 2011
    Nơi ở
    Hà Nội
    Bài viết
    248

    Mặc định Cho em hỏi bài này sai ở chỗ nào ạ?

    Code ẩu, thiếu phẩy ở printf, nhầm lẫn d với f, căn lề lung tung, kích thước xâu không hợp lí, chưa kiểm tra tràn bộ đệm, thao tác sai với xâu kí tự
    C++ Code:
    1. #include<stdio.h>
    2. #include<string.h>
    3.  
    4. struct hoso
    5. {
    6.     char hoten[40];
    7.     float diem;
    8.     char loai[11];
    9. } hs[10];
    10.  
    11. int main()
    12. {
    13.     int i, n = 0;
    14.     printf("Nhap so ho so: "); scanf("%d", &n);
    15.     for (i = 0; i < n; i++) {
    16.         fflush(stdin);
    17.         printf("Nhap ho ten nguoi thu %d: ", i + 1); gets(hs[i].hoten);
    18.         printf("Nhap diem nguoi thu %d: ", i + 1); scanf("%f", &hs[i].diem);
    19.     }
    20.     puts("XEP LOAI VAN HOA");
    21.     printf("%-15s %-5s %-10s \n", "HO VA TEN", "DIEM", "XEP LOAI");
    22.    
    23.    
    24.     for (i = 0; i < n; i++) {
    25.         if (hs[i].diem > 8) strcpy(hs[i].loai, "Gioi");
    26.         else if (hs[i].diem > 6) strcpy(hs[i].loai, "Kha");
    27.         else if (hs[i].diem > 4) strcpy(hs[i].loai, "Trung binh");
    28.         else strcpy(hs[i].loai, "Khong dat");
    29.  
    30.         printf("%-15s %-5.2f %-10s \n", hs[i].hoten, hs[i].diem, hs[i].loai);
    31.     }
    32.     return 0;
    33. }

  7. #7
    Ngày gia nhập
    10 2013
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi greigaz Xem bài viết
    Code ẩu, thiếu phẩy ở printf, nhầm lẫn d với f, căn lề lung tung, kích thước xâu không hợp lí, chưa kiểm tra tràn bộ đệm, thao tác sai với xâu kí tự
    C++ Code:
    1. #include<stdio.h>
    2. #include<string.h>
    3.  
    4. struct hoso
    5. {
    6.     char hoten[40];
    7.     float diem;
    8.     char loai[11];
    9. } hs[10];
    10.  
    11. int main()
    12. {
    13.     int i, n = 0;
    14.     printf("Nhap so ho so: "); scanf("%d", &n);
    15.     for (i = 0; i < n; i++) {
    16.         fflush(stdin);
    17.         printf("Nhap ho ten nguoi thu %d: ", i + 1); gets(hs[i].hoten);
    18.         printf("Nhap diem nguoi thu %d: ", i + 1); scanf("%f", &hs[i].diem);
    19.     }
    20.     puts("XEP LOAI VAN HOA");
    21.     printf("%-15s %-5s %-10s \n", "HO VA TEN", "DIEM", "XEP LOAI");
    22.    
    23.    
    24.     for (i = 0; i < n; i++) {
    25.         if (hs[i].diem > 8) strcpy(hs[i].loai, "Gioi");
    26.         else if (hs[i].diem > 6) strcpy(hs[i].loai, "Kha");
    27.         else if (hs[i].diem > 4) strcpy(hs[i].loai, "Trung binh");
    28.         else strcpy(hs[i].loai, "Khong dat");
    29.  
    30.         printf("%-15s %-5.2f %-10s \n", hs[i].hoten, hs[i].diem, hs[i].loai);
    31.     }
    32.     return 0;
    33. }
    Em cảm ơn! Em Mới tập tành nên hơi ẩu!

  8. #8
    Ngày gia nhập
    01 2013
    Bài viết
    1,479

    Trích dẫn Nguyên bản được gửi bởi vancanh2095 Xem bài viết
    Theo mình biết thì sẽ có lỗi nhưng cũng không chắc. Bạn thử kiểm tra trên máy xem sao. Thông thường khi nhập dữ liệu cho các thành phần của cấu trúc, người ta thường nhập gián tiếp chứ ít khi nhập trực tiếp.
    Bug này chỉ có trên Turbo cổ đại thôi
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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