首页 > 代码库 > Vs中scanf的使用问题

Vs中scanf的使用问题

在使用Vs2017的过程中,scanf函数是C语言中的输入函数,在我使用的过程中出现了以下几个小问题:

(一)针对scanf(“”)函数,在双引号出现的所有文字,符号(包括标点)都需要在控制台输入的时候一模一样,否则将会产生error;

1 #include <stdio.h>
2 #include <stdlib.h>
3 int main() {
4     int a,b;
5     scanf("%d,%d", &a, &b);
6     printf("a=%d,b=%d", a, b);
7     system("pause");
8 }

技术分享

此问题的出现恰恰是双引号中的符号,文字等不一致造成的,在程序中scanf中用的是英文的逗号,而我在控制台输入的是汉语的逗号,这就导致了b的值为负数

还有scanf函数的结束是以敲击回车,结束并且换行的,所以在双引号中加不加\n无所谓,注意加上是要在控制台打出来,要不会出现以下情况;技术分享  按下回车后,光标下移,但是没有输出,切永无止境;

技术分享   打下\n,则会产生输出。

(二)、在我是用scanf的过程中,会出现闪退的情况,即刚刚键入完成,没有看到输出,控制台就退出了;

解决方法:在开始位置加入  #include <stdlib.h> ,然后再main函数中加入 system("pause"); 即可保证不闪退;

     之前查过使用printf不闪退的方法是 getchar(); 

完整代码如下:

1 1 #include <stdio.h>
2 2 #include <stdlib.h>
3 3 int main() {
4 4     int a,b;
5 5     scanf("%d,%d", &a, &b);
6 6     printf("a=%d,b=%d", a, b);
7 7     system("pause");
8 8 }

(三)、关于vs2017中的scanf函数的处理方法

参考百度经验:http://jingyan.baidu.com/article/19020a0a39196e529d284239.html(行之有效)

① 如何解决:error C4996: ‘scanf‘: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

<1>scanf 是相对于 printf 的逆过程,printf是向标准输出流输出,scanf则是从标准输入流获取数据,msdn的解释如下:

技术分享

<2>很多人在使用scanf的时候一来就会遇到如下的问题:

error C4996: ‘scanf‘: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.技术分享

<3>解决方法有两个:

① 修改项目属性:错误中提到的宏 _CRT_SECURE_NO_WARNINGS 添加到工程的项目属性中,具体设置如下,这种设置方法只对当前的项目有效,如果其他的项目使用 scanf 还需要重新设置;

技术分享

技术分享

 

② 修改属性管理器:是将错误中提到的宏 _CRT_SECURE_NO_WARNINGS 添加到属性管理器中,具体设置如下,这种设置方法对所有的项目都有效,如果其他的项目使用 scanf 不再需要设置;

技术分享

 

技术分享

<4>使用快捷键Ctrl+F5运行后,出现了如下的错误:

技术分享

<5>原因在于scanf 的参数需要传递的是变量的地址,而不是变量的值,获取变量的地址的方式是在变量的前面加一个 & 符号,& 符号表示取地址的意思,修改scanf后运行效果如下:

技术分享

 

<6>从使用上可以看出 scanf 函数,比 printf 函数更难用,更容易出错

在vs2017里面不适用&符号的error提示是

技术分享

 

Vs中scanf的使用问题