天天看点

C++输入(1):控制台输入

记录不同方式的控制台输入。(动态输入,以特殊字符结束。)

如下两种输入方式:

#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',' '(回车,空格)结束,再指向下一位置。

继续阅读