记录不同方式的控制台输入。(动态输入,以特殊字符结束。)
如下两种输入方式:
#define MAX_SAMPLE_NUM 100 // 最大样本个数
double **SAMPLE; // 样本集
int SAMPLE_NUM = 0; // 样本个数
int NUMBER = 2; // 维数
第一种方式:getline
void input()
{
int i, j;
double temp;
cout << "请输入样本:\n";
SAMPLE = new double*[MAX_SAMPLE_NUM];
for (i = 0; i<MAX_SAMPLE_NUM; i++)
{
SAMPLE[i] = new double[NUMBER];
}
SAMPLE_NUM = 0;
i = 0;
string str;
while (true)
{
j = 0;
getline(cin, str, ' ');
if (str == ";")
break;
else
{
temp = atof(str.c_str());
cout << temp << " ";
SAMPLE[i][j] = temp;
}
for (j = 1; j < NUMBER - 1; j++)
{
getline(cin, str, ' ');
temp = atof(str.c_str());
cout << temp << " ";
SAMPLE[i][j] = temp;
}
getline(cin, str, '\n');
temp = atof(str.c_str());
cout << temp << endl;
SAMPLE[i][j] = temp;
i++;
}
SAMPLE_NUM = i;
}
第二种方式:cin
void input()
{
int i, j;
cout << "请输入样本(以;结束):\n";
SAMPLE = new double*[MAX_SAMPLE_NUM];
for (i = 0; i<MAX_SAMPLE_NUM; i++)
{
SAMPLE[i] = new double[NUMBER];
}
SAMPLE_NUM = 0;
i = 0;
string str;
while (true)
{
j = 0;
cin >> str;
if (str == ";")
break;
else
{
SAMPLE[i][j] = atof(str.c_str());
}
for (j = 1; j < NUMBER; j++)
{
cin >> SAMPLE[i][j];
}
i++;
}
SAMPLE_NUM = i;
}
按某一模式输入时,识别第一个字符(读取字符串,再判断,是转化类型,还是结束),再按模式输入。
getline 读取以某一字符结束,再指向下一位置。
cin 以'\n',' '(回车,空格)结束,再指向下一位置。