用scanf读入多行数据

问题描述:

在做在线笔试的时候,给出的输入样例是这样的:

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][j];
}
在c++中比较容易实现,需要注意的是添加对应的头文件

#include 
using namespace std;

2. c语言中,用scanf

scanf("%d %d", &n, &m );
pArray = (int **)malloc( n * sizeof(int*) );
for( i=0; i

特别注意:此处for循环中的scanf中的%d后面千万不用加空格。

输出测试:输出和输入的是否一致

printf("============ 输入数据测试 ============\n");
for( i=0; i

小结:

代码看起来很简单,但是笔者在写这段代码的时候还是犯了个比较大的错误。第0行的数据元素个数是固定的,即按照数据输入的方式来读数据:scanf("%d %d", &n, &m ),

两个%d间是以空格隔开的,能够正确读入数据。然后笔者想当然的认为在for循环下也是采用这种空格方式,结果不管怎么样输入,结果不对或者不理想。当不用空格的时候,这个问题居然意外的解决了,哇哦,原来是这样的!天!

你可能感兴趣的:(c/c++语言)