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

Đề tài: Lỗi: Không nhập được họ tên trong c++ trong màn hình console?

  1. #1
    Ngày gia nhập
    12 2010
    Bài viết
    129

    Mặc định Lỗi: Không nhập được họ tên trong c++ trong màn hình console?

    Hi cả nhà ! Hôm nay ngồi rảnh. không biết làm chi cả. nên tập tọe học đối tượng C++ như thế nào. Lâu giờ code C quen tay rồi. cái này lạ quá ^^

    Em có đoạn code thế này
    Đề bài :

    Xây dựng lớp cơ sở HOCSINH có các thông tin: Họ tên, Lớp, Điểm toán, lý, hoá và các phương thức nhập, xuất dữ liệu, tính điểm trung bình.
    Viết chương trình chính thực hiện nhập vào một danh sách n học sinh, sau đó hiển thị danh sách những học sinh có điểm trung bình >=5 .

    Code :
    C++ Code:
    1. #include<iostream.h>
    2. #include<conio.h>
    3. #include<stdio.h>
    4. class hocsinh
    5. {
    6. char hoten[25];
    7. int lop;
    8. float dtoan,dly,dhoa,tb;
    9.  
    10. public:
    11.     void nhap()
    12.     {
    13.         cout<<"Ho ten:";gets(hoten);
    14.         cout<<"lop:";cin>>lop;
    15.         cout<<"diemtoan:";cin>>dtoan;
    16.         cout<<"diem ly:";cin>>dly;
    17.         cout<<"diem hoa:";cin>>dhoa;
    18.             tb=(dtoan+dly+dhoa)/3;
    19.     }
    20.     void xuat()
    21.     {
    22.  
    23.         cout<<"\nhoten:"<<hoten;
    24.         cout<<"\nlop:"<<lop;
    25.         cout<<"\ndiem toan:"<<dtoan;
    26.         cout<<"\ndiem ly:"<<dly;
    27.         cout<<"\ndiem hoa:"<<dhoa;
    28.         cout<<"\ndiemtrungbinh:"<<tb;
    29.         }
    30.         void sapxep()
    31.         {
    32.         if(tb>=5)
    33.          {
    34.  
    35.          cout<<"\n  "<<hoten;
    36.         cout<<"      "<<lop;
    37.         cout<<"         "<<dtoan;
    38.         cout<<"             "<<dly;
    39.         cout<<"                "<<dhoa;
    40.         cout<<"                   "<<tb;
    41.         }
    42.         }
    43.     };
    44. hocsinh sinhvien[100];
    45. main()
    46. {
    47. int i,n;
    48. cout<<"nhap so sinh vien: ";cin>>n;
    49. for(i=0;i<n;i++)
    50. {
    51.     sinhvien[i].nhap();
    52.  
    53.     }
    54.      for(i=0;i<n;i++)
    55.      {
    56.       sinhvien[i].xuat();
    57.       cout<<"\n";
    58.       }
    59.     cout<<"\nnhung sinh vien co diem trung binh >=5";
    60.      cout<<"\nHoten      Lop     Diem toan    Diem ly     Diem hoa      Diem tb";
    61.       for(i=0;i<n;i++)
    62.          {
    63.          sinhvien[i].sapxep();
    64.          }
    65.  
    66. getch();
    67. }

    Khi mình chạy. Nhập số học sinh xong. Nó hiện luôn là

    C++ Code:
    1. Ho ten: lop :
    luôn. nên mình không hiểu. Ai giải thích hộ cái hè :P

    P/s : Devc++ 4 chấm
    Hỏi một câu thì chỉ dốt trong chốc lát.
    Nhưng nếu không hỏi thì bạn sẽ dốt suốt đời.

    ƯỚC MƠ VẪN CHỈ LÀ ƯỚC MƠ NẾU CHỈ BIẾT ƯỚC MƠ MÀ KHÔNG CÓ SỰ NỖ LỰC

  2. #2
    Ngày gia nhập
    10 2010
    Bài viết
    42

    Bạn thêm
    C Code:
    1. fflush(stdin)
    trước mỗi dòng lệnh nhập chuỗi thử xem.

  3. #3
    Ngày gia nhập
    12 2010
    Nơi ở
    Hanoi, Vietnam, Vietnam
    Bài viết
    687

    @linhcodervn : với hướng đối tượng khi viết thì với những hàm có chứa ít câu lệnh ( chứa 1 , 2 câu lệnh thôi) thì nên viết trong hàm public vì nó sử dụng phương thức inline và chương trình sẽ chạy nhanh hơn còn với những đoạn nhập và xuất , sắp xếp như thế kia thì nên định nghĩa ở ngoài lớp thì nhìn nó dễ và syte cũng đẹp hơn !
    thêm nữa cái đoạn này có thể viết lại như sau :
    C++ Code:
    1.         void sapxep()
    2.         {
    3.         if(tb>=5)
    4.          {
    5.  
    6.          cout<<"\n  "<<hoten;
    7.         cout<<"      "<<lop;
    8.         cout<<"         "<<dtoan;
    9.         cout<<"             "<<dly;
    10.         cout<<"                "<<dhoa;
    11.         cout<<"                   "<<tb;

    Nhìn nó sẽ gọn hơn hoặc dùng setw(int n) trong thư viện < iomanip.h> để định dạng khi in ra
    C++ Code:
    1. void sapxep()
    2. {
    3.     if ( tb >= 5 )
    4.     {
    5.         cout <<"\n" << hoten << "\t\t " << lop << "\t\t" << dtoan << "\t\t" << dly << "\t\t" << dhoa << "\t\t" <<tb ;
    6.     }
    7. }
    Đã được chỉnh sửa lần cuối bởi xuyenit55 : 23-07-2011 lúc 08:45 AM.

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

    Trích dẫn Nguyên bản được gửi bởi bookhe Xem bài viết
    Bạn thêm
    C Code:
    1. fflush(stdin)
    trước mỗi dòng lệnh nhập chuỗi thử xem.
    fflush(stdin) là dùng đằng sau hàm scanf thì phải chứ bạn. dùng để chống trôi stdin. cái này ko dùng được
    Hỏi một câu thì chỉ dốt trong chốc lát.
    Nhưng nếu không hỏi thì bạn sẽ dốt suốt đời.

    ƯỚC MƠ VẪN CHỈ LÀ ƯỚC MƠ NẾU CHỈ BIẾT ƯỚC MƠ MÀ KHÔNG CÓ SỰ NỖ LỰC

  5. #5
    Ngày gia nhập
    12 2010
    Bài viết
    129

    Trích dẫn Nguyên bản được gửi bởi xuyenit55 Xem bài viết
    @linhcodervn : với hướng đối tượng khi viết thì với những hàm có chứa ít câu lệnh ( chứa 1 , 2 câu lệnh thôi) thì nên viết trong hàm public vì nó sử dụng phương thức inline và chương trình sẽ chạy nhanh hơn còn với những đoạn nhập và xuất , sắp xếp như thế kia thì nên định nghĩa ở ngoài lớp thì nhìn nó dễ và syte cũng đẹp hơn !
    thêm nữa cái đoạn này có thể viết lại như sau :
    C++ Code:
    1.         void sapxep()
    2.         {
    3.         if(tb>=5)
    4.          {
    5.  
    6.          cout<<"\n  "<<hoten;
    7.         cout<<"      "<<lop;
    8.         cout<<"         "<<dtoan;
    9.         cout<<"             "<<dly;
    10.         cout<<"                "<<dhoa;
    11.         cout<<"                   "<<tb;

    Nhìn nó sẽ gọn hơn hoặc dùng setw(int n) trong thư viện < iomanip.h> để định dạng khi in ra
    C++ Code:
    1. void sapxep()
    2. {
    3.     if ( tb >= 5 )
    4.     {
    5.         cout <<"\n" << hoten << "\t\t " << lop << "\t\t" << dtoan << "\t\t" << dly << "\t\t" << dhoa << "\t\t" <<tb ;
    6.     }
    7. }
    ok ! thank xuyên. Cái nội dung mình cần hỏi chưa giải quyết đc :P
    p/s : dạo ni thấy đọc truyền liên tục hầy
    Hỏi một câu thì chỉ dốt trong chốc lát.
    Nhưng nếu không hỏi thì bạn sẽ dốt suốt đời.

    ƯỚC MƠ VẪN CHỈ LÀ ƯỚC MƠ NẾU CHỈ BIẾT ƯỚC MƠ MÀ KHÔNG CÓ SỰ NỖ LỰC

  6. #6
    Ngày gia nhập
    09 2008
    Bài viết
    41

    Mặc định Lỗi: Không nhập được họ tên trong c++ trong màn hình console?

    Trong c++ thì dùng cin.ignore(1); để bỏ qua ký tự chuyển dòng.Bạn thử thêm vào xem sao

  7. #7
    Ngày gia nhập
    12 2010
    Nơi ở
    Hanoi, Vietnam, Vietnam
    Bài viết
    687

    Trích dẫn Nguyên bản được gửi bởi linhcodervn Xem bài viết
    ok ! thank xuyên. Cái nội dung mình cần hỏi chưa giải quyết đc :P
    p/s : dạo ni thấy đọc truyền liên tục hầy
    muốn định dạng khi in ra đẹp và chuẩn nên dùng sewt(n) nhé , dùng tab vẫn chưa đc chuẩn và đẹp!
    C++ Code:
    1. #include<iostream.h>
    2. #include<conio.h>
    3. #include<stdio.h>
    4. class hocsinh
    5. {
    6. char hoten[25];
    7. int lop;
    8. float dtoan,dly,dhoa,tb;
    9.  
    10. public:
    11.     void nhap();
    12.    
    13.     void xuat();
    14.     void sapxep()
    15.     {
    16.    
    17.     if ( tb >= 5 )
    18.     {
    19.         cout <<"\n" << hoten << "\t" << lop << "\t" << dtoan << "\t" << dly << "\t\t" << dhoa << "\t" <<tb << endl;
    20.     }
    21.   }
    22.  
    23.      
    24. };
    25.  
    26. // phuong thuc nhap sinh vien
    27.    
    28. void hocsinh::nhap()
    29. {
    30.         cout<<"Ho ten:";
    31.         fflush(stdin);
    32.         gets(hoten);
    33.         cout<<"lop:";       cin>>lop;
    34.         cout<<"diemtoan:";  cin>>dtoan;
    35.         cout<<"diem ly:";   cin>>dly;
    36.         cout<<"diem hoa:";  cin>>dhoa;
    37.             tb=(dtoan+dly+dhoa)/3;
    38. }
    39.  
    40. // phuong thuc suat sinh vien
    41.  
    42.  void hocsinh::xuat()
    43.   {
    44.  
    45.         cout << " \nhoten : " << hoten;
    46.         cout << " \nlop : " << lop;
    47.         cout << " \ndiem toan: "<< dtoan;
    48.         cout << " \ndiem ly: " << dly;
    49.         cout << " \ndiem hoa: "<< dhoa;
    50.         cout  << "\ndiemtrungbinh: "<<tb;
    51. }
    52.          
    53. hocsinh sinhvien[100];
    54. main()
    55. {
    56. int i,n;
    57. cout<<"nhap so sinh vien: ";cin>>n;
    58. for(i=0;i<n;i++)
    59. {
    60.     sinhvien[i].nhap();
    61.  
    62.     }
    63.      for(i=0;i<n;i++)
    64.      {
    65.       sinhvien[i].xuat();
    66.       cout<<"\n";
    67.       }
    68.     cout<<"\nnhung sinh vien co diem trung binh >=5";
    69.      cout<<"\nHoten      Lop     Diem toan    Diem ly     Diem hoa      Diem tb";
    70.       for(i=0;i<n;i++)
    71.          {
    72.          sinhvien[i].sapxep();
    73.          }
    74.  
    75. getch();
    76. }

  8. #8
    Ngày gia nhập
    11 2010
    Bài viết
    41

    Thêm vào câu lệnh cin.ignore(); ở trước lệnh nhập họ tên.
    Và nhập họ tên dùng phường thức getline(hoten, 25); là okie.
    Cái này khi code với char* là hay dính lắm. Nếu dùng string thì khỏe hơn

    Góp ý:Ở chỗ sapxep(), if(...) sau đó xuất ra hócinh đó, thì gọi hàm xuất lun, đỡ phải viết lại code.
    i dont care who are u, where yr from, what u did , as long as u love me

  9. #9
    Ngày gia nhập
    01 2010
    Nơi ở
    trong mùng người yêu
    Bài viết
    14

    Dùng fflush(stdin) đúng mà bạn.

    cout<<"Ho ten: ";
    fflush(stdin);
    gets(hoten);

    mình không rành dùng cout cin, nhưng mình xài hàm printf(); cũng tương tự.

    printf("Ho ten: ");
    fflush(stdin);
    gets(hoten);
    Có những đêm anh lang thang trên " net " .
    Anh vô tình nhấn " Shift " gọi tên em .
    Cửa nhà em mẹ em cài " password " .
    Anh rách quần vì cố vượt Firewall .
    Thật cay đắng anh quyết tâm hoc " Hack "
    Để có ngày anh cra-ck cửa nhà em

  10. #10
    Ngày gia nhập
    09 2010
    Nơi ở
    Hà Nội
    Bài viết
    381

    Trong C++ thì mình nghĩ lên dùng như thế này:
    C++ Code:
    1. cin.ignore();
    2. cin.getline(HoTen,25);

    skype: hvphu2010
    Yahoo: hvphu2010
    Sdt: 0129 609 4567

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

  1. Mã nguồn C++ Hàm nhập password trong console [Souce code C++]
    Gửi bởi doicanhden trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 08-05-2012, 11:54 PM
  2. Graphic Cách nhận dữ liệu từ console và hiển thị lên form trong c# ??
    Gửi bởi loc.plsoft trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 05-03-2012, 08:17 PM
  3. Algorithm sự khác nhau giữa Console.readLine và Console.readKey ; giữa Console.write và console.writeLine
    Gửi bởi trangkizd_91 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 20-10-2011, 05:48 PM
  4. Lập trình C Lỗi trong khi nhập mảng cấu trúc có họ tên sinh viên trong lập trình C?
    Gửi bởi trieuvan.n01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 03-01-2011, 09:51 AM
  5. Nhập mảng các string trong Console
    Gửi bởi Cpro trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 22-01-2009, 12:37 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