scanf简单使用

scanf简单使用

简单示例:输入一个m行n列的整数数组

2 5
1 9 3 6 5
5 3 7 10 2

scanf输入:

int m=0,n=0;                                    //(a)
int **array = NULL;                             //(b)
scanf("%d %d", &m,&n);                          //(c)
//cin >> m >> n;
array = new int*[m];
for(int i(0); i<m; i++)
{
    array[i] = new int[n];
    for(int j(0); j<n; j++)
    {
        scanf("%d", &array[i][j]);              //(d)
        //cin >> array[i][j];
    }
}
//输出
for (int i(0); i<m; i++)
{
	for (int j(0); j<n; j++)
	{
		printf("%d ", array[i][j]);             //(e)             
		//cout << array[i][j];
	}
	printf("
");
	//cout << endl;
}

注意:
    (1) scanf中参数必须初始化,如语句(1)(2);
    (2) scanf中参数前必须加引用符号'&';,如语句(c)(d);
    (3) printf中参数前不加“&”,如语句(e);
    
问题:
    (1) 报错“error c4097”
      原因:安全性问题,scanf不检查越界问题,故现在编译器会报错;
      解决方法:(I) 改用scanf_s,会检查是否越界,第三个参数为输入长度,对于字符串的输入可以很好的避免scanf的越界问题;不过对于上面示例中的单量输入并没有什么优势(但是编译器不会报错,这点很重要)。
           (II) 在文件前面添加#pragma warning(disable:4996) ;
           (III) 取消勾选“SDL检查”:项目属性 —— C/C++ —— 常规 ——SDL检查,选择“否”;
      注:有些地方说在文件前面添加#define _CRT_SECURE_NO_DEPRECATE或者#define _CRT_SECURE_NO_WARNINGS,但是在我的电脑上并不能解决问题。
      
    (2) 没有报错,但是输入时会停止运行
      原因:scanf中第二的参量前没有'&';
      
比较:如上面的程序中cin也可以完成输入,但是效率比scanf低太多,同样cout也比printf效率低太多,故在输入输出较复杂时用scanf与printf较好。

原文地址:https://www.cnblogs.com/silentteen/p/7565439.html