Hi bạn Terminal, hi vọng bạn còn quan tâm đến cái này. Cuối cùng mình cũng tìm được giải pháp tuyệt vời^^ cho đoạn code của bạn như sau :
Cách 1
PHP Code:
#include <sstream>
#include <iostream>
#include <string>
#include <conio.h>
bool getInputFromUser(std::string &s)
{
s=""; //Khởi tạo chuỗi rỗng
while(1)
{
char ch = getche();
if(ch == 27) //Ứng với kí tự ESC
return false;
if(ch == 13) //Ứng với kí tự Enter
return true;
s += ch;
}
}
int main()
{
float A[100];
int i,
n = 0,
positive = 0,
negative = 0;
float iss;
std::string aChar;
std::cout << "\nEnter ESC to end\n";
while (getInputFromUser(aChar))
{
//Chuyển chuỗi thành kiểu float
std::istringstream iss (aChar,std::istringstream::in);
iss >> A[n];
if(A[n] > 0)
positive++;
else if(A[n] != 0)
negative++;
n++;
};
std::cout << "\nPositive numbers : \n" << positive;
std::cout << "\nNegative numbers : \n" << negative;
system("pause");
return 0;
}
Ta viết 1 hàm kiểu bool để thao tác lại 2 kí tự ESC và ENTER, cái này nếu bạn thích có thể thay đổi để xài với các kí tự khác ví dụ như <backspace>, <delete>, <insert> cũng được.
Thay vì dùng getch() + putch() để type vào hiện ra thì mình dùng getche(), có ý nghĩa là nhận 1 kí tự từ bàn phím và xuất ra màn hình.
Sau đó ta dùng istringstream trong thư viện #include <sstream> chuyển chuỗi đó về kiểu bạn cần mà ở đây là "float".
Cách 2
Mặc có vẻ đơn giản hơn, nhưng dù gì mình cũng thấy cách 1 logic hơn và hiệu quả hơn, cách này dùng atof chuyển kiểu char[] về số, chỉ đơn giản vậy thui !
PHP Code:
#include <iostream>
#include <string>
#include <conio.h>
#include <cstdlib>
#include <iomanip>
int main()
{
float array[100];
int indice = 0,
n = 0,
positive = 0,
negative = 0;
char ch;
char userInput[10];
std::cout << "\nEnter ESC to end\n";
do
{
ch = getche();
if(ch == 27) break;
if(ch == 13)
{
userInput[indice] = 0;
float number = atof(userInput);
array[n] = number;
n++;
indice = 0;
}
else
{
userInput[indice] = ch;
++indice;
}
}while(1);
for(int i = 0; i <= n; i++) std::cout << array[i] << std::setw(3);
system("pause");
return 0;
}
Cách này cũng được nhưng nó sẽ không kiểm tra cho mình những kí tự nhập vào, cho nên dẫn đến những kết quả không lường được. Cách này thì chỉ nên tham khảo, nên dùng cách 1.