首页 > 代码库 > 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的使用问题