bỏ điều kiện 1 trong while đi thay vào đó là
//mã giả nhé
bỏ C lâu quá, không chắc chính xác code nhưng ý tưởng là vậyCode:char ch; scanf("%c",ch); while ( ch != 'esc') { .......... }
mình đang viết chương trình làm cái đồng hồ điện tử
thuật toán của mình là cứ nhập giờ mới cho nó là nó chạy hoài không dừng
bây giờ mình muốn nó dừng lại chỉ khi bấm nút "Esc"
mình đang bó tay ai giúp mình với
Code:#include<iostream.h> #include<dos.h> #include<conio.h> void main() { clrscr(); int gio,phut,giay; cout<<"nhap gio"; cin>>gio; cout<<"nhap phut"; cin>>phut; cout<<"nhap giay"; cin>>giay; while(1) { clrscr(); gotoxy(33,15); if(gio<10) cout<<"0"<<gio<<":"; else cout<<gio<<":"; if(phut<10) cout<<"0"<<phut<<":"; else cout<<phut<<":"; if(giay<10) cout<<"0"<<giay; else cout<<giay; giay++; if(giay>=60) { giay=0; phut++; } if(phut>=60) { phut=0; gio++; } if(gio>=24) gio=0; delay(1000); } getch(); }
bỏ điều kiện 1 trong while đi thay vào đó là
//mã giả nhé
bỏ C lâu quá, không chắc chính xác code nhưng ý tưởng là vậyCode:char ch; scanf("%c",ch); while ( ch != 'esc') { .......... }
Cái này hơi gay 1 tí, nhưng biết rùi thì cũng không có gì, viết 1 hàm nhận vào 1 string, dùng isstringstream nhận lại giá trị, tui demo lại sơ sơ thui, coi đó mà sữa lại, compiler tui xài dos.h không được.
C++ Code:
#include <sstream> #include <iostream> #include <string> #include <conio.h> bool PressEscToAbort(std::string &ss) { ss = ""; while(1){ char key = getche(); if(key == 27) return false; // Thoát! if(key == 13) return true; // Đọc vào dữ liệu thành công ss += key; } } int main() { system("cls"); int hour, mins, secs; std::string aChar; while(PressEscToAbort(aChar)) { std::istringstream iss (aChar,std::istringstream::in); if(hour < 10) else if(mins < 10) else if(secs < 10) else secs++; if(secs >= 60) { secs = 0; mins++; } if(mins >= 60) { mins = 0; hour++; } if(hour >= 24) hour = 0; } }
mình đã học chương trình con rồi nhưng còn nhiều lệnh mình chưa biết bạn rox_rook giải thích những dòng lệnh mình đánh dấu * ở dưới dùm nha .thanks
C++ Code:
#include <sstream>*//thư viên này là thư viên gì vậy #include <iostream>//sao thư viên iostream và string lại không có .h ở sau #include <string> #include <conio.h> bool PressEscToAbort(std::string &ss)//*****từ bool có giá trị như thế nào, std::string &ss có nghĩa là gì { ss = ""; while(1){ char key = getche(); if(key == 27) return false; if(key == 13) return true; ss += key; } } int main() { system("cls");//*****bạn giải thích dùm dòng này int hour, mins, secs; std::string aChar;//********mình không hiểu dòng này giải thích dùm nha while(PressEscToAbort(aChar))//*****mình không hiểu dòng lệnh này { std::istringstream iss (aChar,std::istringstream::in);//mình không hiểu dòng lệnh này if(hour < 10) else if(mins < 10) else if(secs < 10) else secs++; if(secs >= 60) { secs = 0; mins++; } if(mins >= 60) { mins = 0; hour++; } if(hour >= 24) hour = 0; } }
bool : trả về true or false ( hay 1 or 0 )
Do trong Compiler của tui không có clrscr() nên tui xài system("cls"), 2 thằng này có tác vụ như nhau : clear màn hình.system("cls");//*****bạn giải thích dùm dòng này
Thay vì dùng using namespace std;, thì tui không dùng tui đặt luôn vào cout và cin, 1 phần để nhớ các keyword của C++, và khi viết chương trình to 1 chút thì tránh conflict với namespace do mình đặt ra, vào thread hướng dẫn C++ tìm cái thread namespace cho newbie đọc thử coi sao.std::cout << "Hours : ";//chữ std:: đặt trước cout ,cin để làm gì vậy
Khởi tạo 1 biến aChar kiểu string, hay nó là 1 chuỗi.std::string aChar;//********mình không hiểu dòng này giải thích dùm nha
Như đã nói ở trên thằng này trả về 0 hoặc 1, khi nhấn ESC thì tức là 27, coi lại hàm PressEscToAbort(aChar) xem, thoát hay không là lúc này đây.while(PressEscToAbort(aChar))//*****mình không hiểu dòng lệnh này
Dòng này tạo 1 stream để đọc input vào từ các kiểu dữ liệu khác, vì thường nếu ta mix : cin và cin.getline, gets().. thì buffer rất dễ bị lỗi, bài này coi đơn giản chứ thực ra cũng khó chịu đó. Vì hàm PressEscToAbort(aChar) nhận vào 1 string nên ta chuyển lại string này thành 1 buff có thể nhận vào dữ liệu khác ví dụ int, double float.std::istringstream iss (aChar,std::istringstream::in);//mình không hiểu dòng lệnh này
Ví dụ khi ta xài :
Thì cũng như ta cin >> data vậy, nhưng sẽ không ảnh hưởng tới biến aChar mà ta đã đặt ra để thoát bằng ESC.C++ Code:
double data; iss >> data
Phần này nếu mới học thì chấp nhận vậy là được, thao tác I/O trong C++ là rất khó. Cứ từ từ rùi học.
-sstream dành cho isstringstream.#include <sstream>*//thư viên này là thư viên gì vậy
#include <iostream>//sao thư viên iostream và string lại không có .h ở sau
#include <string>
#include <conio.h>
-Nếu chuẩn của C++ không có iostream.h và string.h.
-Kiểu iostream.h là kiểu cũ rùi, còn string.h và string là khác nhau. string.h = cstring. Đây là thư viện của C. Còn string là của C++. string của C++ thì có nhiều hàm vượt trội hơn C nhiều, nếu thực sự học C++ thì phải dùng #include <string>
Trừ thằng conio.h, tất cả các thư viện còn lại đều của C++, không có trong C.
Đã được chỉnh sửa lần cuối bởi rox_rook : 08-03-2008 lúc 12:53 AM.
mấy ông thầy ở trường dậy mình không biết là C hay C++ nữa lúc thì C lúc thì C++ (vì cout,cin là của C++ mà).Ở trường dạy mình viết chương trình trên borland C++ For Dos không biết lệnh mà rox_rook chỉ cho mình có xài trong borland c++ for dos được không
Tui xài compiler Visual C++, DevCpp, Gcc, Codeblock, MinGW, tất cả các lệnh và cấu trúc, thư viện tui xài đều có thể run ngon lành trên các compiler này. Mặc dù tui cũng cài complier Borland Builder 6.0 nhưng tui lại ghét thằng này nhất, cái kiểu main() lẻ loi nhìn rất khó chịu. Tui không có học DH ở VN nên không rõ các thầy cô bên ấy yêu cầu ra sao, có gì thì cậu chịu khó hỏi bạn bè trong lớp mà xài cho đúng, vì bên đây thầy cô tui thì bắt xài Visual C++ 2008 hoặc Visual C++ 2003 or 2005. Đối với tui thì tui thích xài gcc vì dịch có cực 1 chút nhưng hiểu tại sao hoạt động, mới học thì nên xài mấy thằng kia mà tui nói. Thằng nào cũng free hết!
Còn C và C++ nếu học sâu sẽ khác rất rất nhiều, cố gắng hỏi thầy cô xem họ đang dạy cái gì, C thì ra C, còn C++ thì ra C++, mix 2 cái này là cực kì poor programming style.
lấy code về chạy ko đc Y__Y..anh rox_rook có thể viết 1 đoạn code có thể chạy trên Borland C++ bình thường đc ko ạ..thankssss
Trên borland thì em đọc help của nó, hình như nó không có prefix std::, vì anh hiện giờ không có borland nên không thể test cho em được.
theo mình nghĩ bạn nên cho điều kiện trong while . vì chương trình của ban khi nhập giờ thì lúc nào cũng thỏa mãn điều kiện while nên không thể nào thoát