问题描述:
在做在线笔试的时候,给出的输入样例是这样的:
3 4 //输入第0行,表示 接下来要输入n 行 m 列数据
1 2 3 4 //输入第1行
11 12 13 14 //输入第2行
21 22 23 24 //输入第3行
其中,每行元素以空格隔开,行间以回车符隔开。若在dos下采用这种方式输入数据,怎样才能将这部分数据无误的读入到程序呢?
问题解决:将输入的数据存放在二维数组中为例
int n = 0, m = 0;
int **pArray = NULL;
int i, j;
1. c++中,用cin
cin >> n >> m;
pArray = (int **)malloc( n * sizeof(int*) );
for( i=0; i
{
pArray[i] = (int*)malloc( m * sizeof(int) );
for( j=0; j
cin >> pArray[i][j];
}在c++中比较容易实现,需要注意的是添加对应的头文件
#include
using namespace std;
2. c语言中,用scanf
scanf("%d %d", &n, &m );
pArray = (int **)malloc( n * sizeof(int*) );
for( i=0; i
{
pArray[i] = (int*)malloc( m * sizeof(int) );
for( j=0; j
{
scanf("%d", pArray[i] + j );
}
}
特别注意:此处for循环中的scanf中的%d后面千万不用加空格。
输出测试:输出和输入的是否一致
printf("============ 输入数据测试 ============\n");
for( i=0; i
{
for( j=0; j
{
printf("%d ", pArray[i][j] );
}
printf("\n");
}
小结:
代码看起来很简单,但是笔者在写这段代码的时候还是犯了个比较大的错误。第0行的数据元素个数是固定的,即按照数据输入的方式来读数据:scanf("%d %d", &n, &m ), 两个%d间是以空格隔开的,能够正确读入数据。然后笔者想当然的认为在for循环下也是采用这种空格方式,结果不管怎么样输入,结果不对或者不理想。当不用空格的时候,这个问题居然意外的解决了,哇哦,原来是这样的!天!