玖叶教程网

前端编程开发入门

输入函数scanf()(输入函数scanf()中,不能指定的格式是AoBxCsDU)

一、scanf()的使用


控制台输入和scanf()内的字串部分输入形式保持一致,原样输入

int a, b; 
scanf("%d %d", a, b); 
scanf("%d-%d", a, b);

如 第2行:

两个%d之间用的空格,则输入的时候也要加空格

如 第3行:

两个%d之间用的短线,则输入的时候也要加“-”

输入与输出结果:

1.

2.

二、scanf()的返回值


scanf函数是C语言中用于标准输入读取不同类型数据的函数,

sacnf的返回值是成功赋值的项目数

如果失败,则返回 EOF

例1:(在执行的时候可能会报错--4996,如果报错下面有解决方法 哦)

#include<stdio.h>

int main() {
    int a;
    printf("请输入一个整数:");
    if (scanf("%d", &a) == 1) {
        printf("输入的整数是:%d\n", a);
    }
    else {
        printf("输入失败!\n");
    }
}

例2:

#include<stdio.h>

int main() {
    int a, b;
    printf("请输入整数:");
    if (scanf_s("%d %d", &a, &b) == 2) {
        printf("输入的整数是:%d %d\n", a, b);
    }
    else {
        printf("输入失败!\n");
    }
}

三、4996报错


在使用scanf时可能出现的问题:

原因

错误 C4996 是一个编译器警告,表示使用了一个被认为是不安全或者已经不推荐使用的函数。在这个例子中,scanf 函数被使用,这个函数是一个不安全的输入/输出函数,它可能会导致缓冲区溢出。

解决办法

  1. 使用安全的替代函数,例如 scanf_s(在 Microsoft Visual Studio 中)或其他线程安全的函数。
//将
scanf("%d", &a) == 1
//改写为
scanf_s("%d", &a, sizeof(a)) == 1
  1. 如果你确信使用当前函数不会引起安全问题,可以通过编译器指令 #pragma warning(disable:4996) 来禁用这个特定警告。
#ifdef _MSC_VER
#pragma warning(disable:4996)
#endif
 
// 其他代码



_MSC_VER

_MSC_VER是微软的预编译控制。

_MSC_VER可以分解为:

MS:Microsoft的简写。

C:MSC就是Microsoft的C编译器。

VER:Version的简写。

_MSC_VER的意思就是:Microsoft的C编译器的版本。

微软不同时期,编译器有不同的版本:

MS VC++10.0 _MSC_VER=1600

MS VC++9.0 _MSC_VER=1500

MS VC++8.0 _MSC_VER=1400

......

其中MS VC++10.0就是Visual C++ 2010,MS VC++9.0就是Visual C++2008,MS VC++8.0就是Visual C++2005

在程序中加入_MSC_VER宏可以根据编译器版本让不同版本的编译器选择性地编译一段程序。


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言