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ố 20 kết quả

Đề tài: class trong c ++

  1. #1
    Ngày gia nhập
    07 2018
    Bài viết
    2

    Mặc định class trong c ++

    #include <stdio.h>
    #include <conio.h>
    #include <iostream>
    #include <windows.h>
    #include <String>
    class Student{
    public:
    char* id = new char;
    char* name = new char;
    char* score = new char;
    };
    int main(){
    Student Student1;
    Student Student2;
    Student Student3;
    Student Student4;
    Student Student5;
    for(int i = 1; i <= 5; i = i + 1){
    switch(i){
    case 1: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student1.id);
    printf("Name:");
    gets(Student1.name);
    printf("Score:");
    gets(Student1.score);
    break;
    case 2: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student2.id);
    printf("Name:");
    gets(Student2.name);
    printf("Score:");
    gets(Student2.score);
    break;
    case 3: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student3.id);
    printf("Name:");
    gets(Student3.name);
    printf("Score:");
    gets(Student3.score);
    break;
    case 4: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student4.id);
    printf("Name:");
    gets(Student4.name);
    printf("Score:");
    gets(Student4.score);
    break;
    case 5: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student5.id);
    printf("Name:");
    gets(Student5.name);
    printf("Score:");
    gets(Student5.score);
    break;

    }
    }
    printf("\nPrintList: ID_NAME_SCORE\n");
    for(int i = 1; i <= 5; i = i + 1){
    switch(i){
    case 1: printf("%s_%s_%s\n", Student1.id, Student1.name, Student1.score);
    break;
    case 2: printf("%s_%s_%s\n", Student2.id, Student2.name, Student2.score);
    break;
    case 3: printf("%s_%s_%s\n", Student3.id, Student3.name, Student3.score);
    break;
    case 4: printf("%s_%s_%s\n", Student4.id, Student4.name, Student4.score);
    break;
    case 5: printf("%s_%s_%s\n", Student5.id, Student5.name, Student5.score);
    break;

    }
    }
    char* SCORE = new char;
    printf("\nNhap Score:\n");
    gets(SCORE);
    printf("SCORE vua nhap: %s\n", SCORE);
    if(SCORE == Student1.score || SCORE == Student2.score||SCORE == Student3.score||SCORE == Student4.score||SCORE == Student5.score){
    if(SCORE == Student1.score){
    printf("%s\n", Student1.name);
    }
    if(SCORE == Student2.score){
    printf("%s\n", Student2.name);
    }
    if(SCORE == Student3.score){
    printf("%s\n", Student3.name);
    }
    if(SCORE == Student4.score){
    printf("%s\n", Student4.name);
    }
    if(SCORE == Student5.score){
    printf("%s\n", Student5.name);
    }
    }else{
    printf("NULL\n");
    }
    }


    cái đoạn cuối ý sao mình nhập giá trị theo 1 trong các xxx.score nó lại in NULL vậy (chú ý đã nhập SCORE = một trong các xxx.score

  2. #2
    Ngày gia nhập
    01 2014
    Bài viết
    26

    SCORE và score đều là con trỏ....đến vùng nhớ khác nhau thì làm sau mà bằng nhau được...

    Nên phải so sánh như vầy:

    *SCORE == Student1.*score

    ------

    Còn nữa, khi bạn xài char* name = new char... bạn chắc phải biết là name chỉ có 1 ký tự thôi à nha....

    Nếu muốn name = "Nguyen van Ti" thì phải sửa lại:

    name = new char[50];
    score = new char[10];

    tùy theo bạn muốn có bao nhiêu ký tự.... (50, 10, 25, ....)

    Nhưng nếu xài score = new char[10]... thì lại không thể so sánh kiểu

    *SCORE == Student1.*score

    mà phải dùng hàm strcmp...

    ----

    Cuối cùng, xài new mà sao không thấy delete đâu hết vậy....

  3. #3
    Ngày gia nhập
    07 2018
    Bài viết
    2

    à mình làm đc rồi. cảm ơn bạn nhé

    #include <stdio.h>
    #include <conio.h>
    #include <iostream>
    #include <windows.h>
    #include <String>
    class Student{
    public:
    char id[50];
    char name[50];
    char score[50];
    };
    int main(){
    Student Student1;
    Student Student2;
    Student Student3;
    Student Student4;
    Student Student5;
    Student Find;
    for(int i = 1; i <= 5; i = i + 1){
    switch(i){
    case 1: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student1.id);
    printf("Name:");
    gets(Student1.name);
    printf("Score:");
    gets(Student1.score);
    break;
    case 2: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student2.id);
    printf("Name:");
    gets(Student2.name);
    printf("Score:");
    gets(Student2.score);
    break;
    case 3: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student3.id);
    printf("Name:");
    gets(Student3.name);
    printf("Score:");
    gets(Student3.score);
    break;
    case 4: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student4.id);
    printf("Name:");
    gets(Student4.name);
    printf("Score:");
    gets(Student4.score);
    break;
    case 5: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student5.id);
    printf("Name:");
    gets(Student5.name);
    printf("Score:");
    gets(Student5.score);
    break;

    }
    }
    printf("\nPrintList: ID_NAME_SCORE\n");
    for(int i = 1; i <= 5; i = i + 1){
    switch(i){
    case 1: printf("%s_%s_%s\n", Student1.id, Student1.name, Student1.score);
    break;
    case 2: printf("%s_%s_%s\n", Student2.id, Student2.name, Student2.score);
    break;
    case 3: printf("%s_%s_%s\n", Student3.id, Student3.name, Student3.score);
    break;
    case 4: printf("%s_%s_%s\n", Student4.id, Student4.name, Student4.score);
    break;
    case 5: printf("%s_%s_%s\n", Student5.id, Student5.name, Student5.score);
    break;

    }
    }
    printf("\nNhap Score:\n");
    gets(Find.score);
    printf("SCORE vua nhap: %s\n", Find.score);
    if(*Find.score == *Student1.score || *Find.score == *Student2.score||
    *Find.score == *Student3.score|| *Find.score == *Student4.score|| *Find.score == *Student5.score){
    if(*Find.score == *Student1.score){
    printf("%s\n", Student1.name);
    }
    if(*Find.score == *Student2.score){
    printf("%s\n", Student2.name);
    }
    if(*Find.score == *Student3.score){
    printf("%s\n", Student3.name);
    }
    if(*Find.score == *Student4.score){
    printf("%s\n", Student4.name);
    }
    if(*Find.score == *Student5.score){
    printf("%s\n", Student5.name);
    }
    }else{
    printf("NULL\n");
    }
    }

    - - - Nội dung đã được cập nhật ngày 30-07-2018 lúc 02:22 PM - - -

    à cho mình hỏi thêm xíu nữa. mình khai báo char* x; nó cứ hiện "cảnh báo"
    [Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings] vậy là z

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

    Chương trình trên có vấn đề.

    1. *Find.score == *Student.score chỉ so sánh ký tự đầu tiên mà thôi. Hai cái score 12 và 15 lúc nào cũng bằng nhau vì ký tự đầu tiên là 1. Bạn nên xài hàm strncmp.

    strncmp(Find.score, Student1.score, 50)

    2. C++ mà sao lại sử dụng printf và gets??? Nên sử dụng cin và cout mới đúng.

    3.
    deprecated conversion from string constant to 'char*'
    Đó là bạn dùng char* x = "cong dong" (trong C thì được nhưng C++ không chấp nhận). "cong dong" là const char* mà x chỉ là char*. Nên sửa lại thành char x[] = "cong dong" thì được thôi.

  5. #5
    Ngày gia nhập
    07 2018
    Bài viết
    2

    Trích dẫn Nguyên bản được gửi bởi huycan Xem bài viết
    Chương trình trên có vấn đề.

    1. *Find.score == *Student.score chỉ so sánh ký tự đầu tiên mà thôi. Hai cái score 12 và 15 lúc nào cũng bằng nhau vì ký tự đầu tiên là 1. Bạn nên xài hàm strncmp.

    strncmp(Find.score, Student1.score, 50)

    2. C++ mà sao lại sử dụng printf và gets??? Nên sử dụng cin và cout mới đúng.

    3.
    Đó là bạn dùng char* x = "cong dong" (trong C thì được nhưng C++ không chấp nhận). "cong dong" là const char* mà x chỉ là char*. Nên sửa lại thành char x[] = "cong dong" thì được thôi.
    1. cho mình hỏi ctrcncmp nó ở thư viện nào vậy.
    2. à do mình mới học nên mình khai báo thư viện nó hơi lung tung. cin cout dùng thư viện iostream, còn printf và gets thì sử dụng stdio.h

  6. #6
    Ngày gia nhập
    01 2014
    Bài viết
    26

    Mặc định class trong c ++

    strncmp nằm trong thư viện <cstring>

  7. #7
    Ngày gia nhập
    07 2018
    Bài viết
    2

    bạn xem hộ code mình với xem nó bị lỗi ở chỗ nào mà nó trả kết quả đc r nhưng cái student 5 không thể hiển thị đc:
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		111.PNG
Lần xem:	1
Size:		6.3 KB
ID:		63904
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		222.PNG
Lần xem:	0
Size:		5.9 KB
ID:		63905

    code:

    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>
    #include <string.h>
    class Student{
    public:
    char id[50];
    char name[50];
    char score[4];
    };
    int main(){
    Student Student1;
    Student Student2;
    Student Student3;
    Student Student4;
    Student Student5;
    Student Find;
    for(int i = 1; i <= 5; i = i + 1){
    switch(i){
    case 1: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student1.id);
    printf("Name:");
    gets(Student1.name);
    printf("Score:");
    gets(Student1.score);
    break;
    case 2: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student2.id);
    printf("Name:");
    gets(Student2.name);
    printf("Score:");
    gets(Student2.score);
    break;
    case 3: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student3.id);
    printf("Name:");
    gets(Student3.name);
    printf("Score:");
    gets(Student3.score);
    break;
    case 4: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student4.id);
    printf("Name:");
    gets(Student4.name);
    printf("Score:");
    gets(Student4.score);
    break;
    case 5: printf("Nhap Student%d:\n", i);
    printf("ID:");
    gets(Student5.id);
    printf("Name:");
    gets(Student5.name);
    printf("Score:");
    gets(Student5.score);
    break;

    }
    }
    printf("\nPrintList: ID_NAME_SCORE\n");
    for(int i = 1; i <= 5; i = i + 1){
    switch(i){
    case 1: printf("%s_%s_%s\n", Student1.id, Student1.name, Student1.score);
    break;
    case 2: printf("%s_%s_%s\n", Student2.id, Student2.name, Student2.score);
    break;
    case 3: printf("%s_%s_%s\n", Student3.id, Student3.name, Student3.score);
    break;
    case 4: printf("%s_%s_%s\n", Student4.id, Student4.name, Student4.score);
    break;
    case 5: printf("%s_%s_%s\n", Student5.id, Student5.name, Student5.score);
    break;

    }
    }
    printf("\nNhap Score:\n");
    gets(Find.score);
    printf("SCORE vua nhap: %s\n", Find.score);

    int FindScore[4];
    for(int i = 0; i <= 4; i = i + 1){
    switch(i){
    case 0: FindScore[i] = strncmp(Find.score, Student1.score, 4);
    break;
    case 1: FindScore[i] = strncmp(Find.score, Student2.score, 4);
    break;
    case 2: FindScore[i] = strncmp(Find.score, Student3.score, 4);
    break;
    case 3: FindScore[i] = strncmp(Find.score, Student4.score, 4);
    break;
    case 4: FindScore[i] = strncmp(Find.score, Student5.score, 4);
    break;
    }
    }
    for(int i = 0; i <= 4; i = i + 1){
    printf("FindScore[%d] = %d\n", i, FindScore[i]);
    }
    for(int i = 0; i <= 4; i = i + 1){
    if(FindScore[i] == 0){
    switch(i){
    case 0: printf("%s\n", Student1.name);
    break;
    case 1: printf("%s\n", Student2.name);
    break;
    case 2: printf("%s\n", Student3.name);
    break;
    case 3: printf("%s\n", Student4.name);
    break;
    case 4: printf("%s\n", Student5.name);
    break;
    }
    }
    }


    getch();
    }
    Attached Thumbnails Attached Thumbnails 111.PNG  

  8. #8
    Ngày gia nhập
    01 2014
    Bài viết
    26

    int FindScore[4]; <<< lỗi ở đây nè... phải là 5 chứ ...

    int FindScore[5];

  9. #9
    Ngày gia nhập
    07 2018
    Bài viết
    2

    mình sửa thành 5 cũng ko đc. mà thực ra 4 thì cũng có gì sai. khi Student.score có 5 giá trị FindScore[4]={0, 1, 2, 3, 4} cũng có 5 giá trị, mình chỉ ko hiểu tại sao ko thể hiển thị giá trị cuối thôi

  10. #10
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    407

    Chỉ số trong ngoặc vuông là độ dài của mảng, không phải là chỉ số lớn nhất, bạn mới chuyển sang c++ phải không?

    - - - Nội dung đã được cập nhật ngày 13-08-2018 lúc 08:10 PM - - -

    Còn nữa, tại sao phải khai báo Find là Student trong khi chỉ sử dụng trường Score, chỉ cần khai báo char findscore là đủ

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