精华内容
下载资源
问答
  • C语言scanf_s()函数的用法

    万次阅读 多人点赞 2019-07-10 22:01:12
    C语言scanf_s()函数的用法 前言 今天开始学习C语言,看书学的挺快的,感觉也不能,就想着敲下代码,结果错误百出,差点不想学了,果然编程是敲会的。下面说说第一个程序遇到的问题与心得 scanf_s()前身——scanf() ...

    前言

    今天开始学习C语言,看书学的挺快的,感觉很有趣,就想着敲下代码,结果错误百出,差点不想学了,果然编程是会的。下面说说第一个程序遇到的问题与心得

    scanf_s()前身——scanf()

    有的教材里用的scanf(),其实在目前Visual Studio版本中已经弃用了,用scanf_s()函数代替了。scanf()既然已经被替代了我就不多说了。

    为什么现在要用scanf_s()?

    scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了scanf_s()。在调用该函数时,必须提供一个数字以表明最多读取多少位字符。另外,很多带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,防止hacker利用原版的不安全性(漏洞)黑掉系统。简单的理解,就是scanf_s会比scanf更安全,那么为了安全也需要编程者多传一些参数,这些参数就是变量的长度(占用的字节数)。(摘自ID“自信男孩"的解答)
    很多带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,有时黑客可以利用原版的不安全性黑掉系统。比如:char d[20];写成scanf_s("%s",d,20);才是正确的,有这个参数20使准确性提高。(百度百科)

    scanf_s()简介

    微软MSDN上简单的函数原型为int scanf_s( const char *format [, argument]...);
    看不懂没关系,我也不懂。
    参数类型可以是%d %f %c等等
    函数的返回值: 函数是int型,返回一个整型,该整型值就是scanf_s()函数所输入的个数,现在设定为result,后文代码演示就明白了

    如何使用scanf_s()

    直接上代码,简单易懂

    int    i,b;
    int result;//函数返回值
    scanf_s("%d ", &i);
    scanf_s("%d %d", &i, &b);
    result=scanf_s("%d %d", &i, &b);//运行结果为2,因为输入了两个数,一个a,一个b
    

    但是输入字符的时候,scanf_s()的安全性就体现出来了

    char     c,  s[80];
    scanf_s("%c %s ,  &c, 1,s,80);   //字符c输入1个,c后面跟1,s字符数组80个,所以s后面加80。
    

    这就是两个函数的区别之处了。
    注意注意:如果是

    char buf[5];
    scanf_s("%s",buf,5);//表示最多读取4个字符,因为buf[4]要放'\0'
    

    切记键盘输入是要少敲一位字符,因为数组最后一位要放结束符,这个百度数组的用法就清楚了。
    我调试代码发现了,例如当我输入"abcde"时,buf字符数组里出错没有任何东西
    调试情况
    只有输入四个字符时才正确。
    我就不说其他的了,也不放代码,刚开始一定要自己多敲一敲。

    键盘响应输入的问题

    第一种情况:
    当我们scanf_s("%d%d%d",a,b,c);
    如果你在键盘上输入了1 2 3(1空格2空格3),那么第一个空格就被当作字符了。要用回车,用回车,用回车。
    第二种情况:
    当我们scanf_s("%d,%d,%d",a,b,c);
    这个时候我么就需要用逗号隔开,比如想给a输入1,b输入2,c输入3。键盘的按键顺序就是:1 逗号 2 逗号 3 Enterr
    (逗号代表逗号键)。

    结束语

    好累啊,写博客心好累,主要是花太多时间了,自己还是个初学者,写的内容不深,我还是少写点基础的,写高深点的吧。如果想探讨C/C++学习,欢迎加入C/C++学习交流群:903829347

    展开全文
  • C语言scanf函数

    2019-07-10 20:44:39
    C语言scanf函数 函数名:scanf 功能:实现格式化输入 格式:scanf(“<格式化字符串>”,地址表) scanf函数是通用终端格式化输入函数,它从标准设备键盘上读取信息,然后把信息输入任何有固有类型的数据...

    C语言scanf函数

    函数名:scanf
    功能:实现格式化输入
    格式:scanf(“<格式化字符串>”,地址表)

    scanf函数是通用终端格式化输入函数,它从标准设备键盘上读取信息,然后把信息输入任何有固有类型的数据的地址中

    scanf常用格式化字符:%d(整型,十进制),%s(字符串型),%c(字符型),%f(浮点型,小数)

    具体使用举例
    #include<stdio.h>
    int main()
    {
    int a,b,c;
    printf(“alittle conut:\n”);
    scanf("%d ,%d,%d",&a,&b,&c);
    printf(“输出三个数字:%d % %d\n”,a,b,c);
    printf(“alittle conu:\n”);
    scanf(“a=%d ,b=%d,c=%d”,&a,&b,%c);
    printf(“输出三个数字:%d %d%d”,a,b,c);
    printf(“alittle conu:\n”);
    scanf("%d %d%d",&a,&b,&c);
    printf(“输出三个数字:%d % %d\n”,a,b,c);
    return 0;
    }
    输出如图
    #include<stdio.h>
    int main()
    {
    char a[11];
    char b;
    printf(“put achar:\n”);
    scanf("%c",&b);
    printf("%c\n",b);
    printf(" put somechar:\n");
    scanf("%s",&a);
    printf("%s\n",a);
    return 0;
    }
    运行结果:
    在这里插入图片描述

    注意事项one
    在键盘上打印的输入需要与“格式化字符串”使用相同的格式才有效,否则会出错

    注意事项two:
    我们在运行这个程序会发现在第二个scanf函数自动跳过,不等待我输入就自己执行了,这是为什么呢?**我们在运行这个程序会发现在第二个scanf函数自动跳过,不等待输入就自己执行了,这是为什么呢?
    原因:当scanf函数控制符是字符c的时候,我们在程序前一行连续输入两个整数的时候打的回车或者是空格都会被下一轮的scanf(“%c”,xx)吸收导致我们无法在输入下一个字符
    更详细一点说呢就是
    函数scanf( )从标准输入设备(键盘) 读取输入的信息,不会直接赋值给变量,而是先储存到一个缓冲区中
    当程序执行到函数scanf()时,程序会从缓冲区中读取;
    如果缓冲区是空的,才会停滞,光标闪烁,等待键盘的输入.
    **

    解决方法

    1,在scanf(“%c”,c)的上一行添加一个getchar()函数来读取掉多余的字符,使得下一个scanf函数能正常运行
    2,在scanf(“%c”,c)后面重复打印一个scanf(“%c”,c)再次读取输入的字符

    展开全文
  • c语言scanf用法

    万次阅读 多人点赞 2019-07-10 23:47:01
    C语言scanf的用法和注意事项 内容参考:https://blog.csdn.net/hk_kang/article/details/78747726 scanf概念 scanf是格式输入函数,功能是在屏幕上输入指定的信息。简单的来说和printf相似却不相同。 scanf调用...

    C语言中scanf的用法和注意事项

    scanf概念

    scanf是格式输入函数,功能是在屏幕上输入指定的信息。简单的来说和printf相似却不相同。
    scanf调用格式: scanf("<格式化字符串>",<地址表>);
    如:
    #include <stdio.h>
    int main()
    {
    int a,b,c;
    printf(“input three data:\n”);//使用 scanf 之前先用 printf 提示输入。
    scanf("%d%d%d",&a,&b,&c); // scanf 的“输入参数”中,前面的取地址符&记住
    printf("%d,%d,%d/n",a,b,c);
    return 0;
    }
    运行时按如下方式输入三个值:
    3□4□5↙(输入a,b,c的值)
    3,4,5 (printf输出的a,b,c的值)
    (1) &a、&b、&c中的&是地址运算符,分别获得这三个变量的内存地址。
    (2) "%d%d%d"是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab键、回车键分隔。
    以下是合法输入方式:
    ① 3□□4□□□□5↙
    ② 3↙
    4□5↙
    ③ 3(tab键)4↙
    5↙

    我们常用到的字符串有:
    %c 读入一个字符。
    %d 读入十进制整数。
    %f 用来输出实数,以小数形式输出。
    %lf 用来输出实数,以更长的小数形式输出。

    分享下学习中明白的注意点:
    1 当定义一个字符变量时,在键盘上输入一个scanf会吸收回车和空格字符,为了进行代码的可行性需在函数结束前加函数getchar()进行吸收。例如:在这里插入图片描述
    定义一个字符z,是scanf是从键盘上获取一个值。因为我们定义的是一个字符,所以将键盘上所有获得的字符赋值给z,而空格和回车也是字符,会影响字符赋值给z,所以要在末尾加个getchar()函数进行吸收。
    没加getchar():
    在这里插入图片描述
    程序第二次进行运算时回车成了运算符了。

    正确结果是:
    在这里插入图片描述
    2 scanf函数中的“格式控制”后面应当是变量地址,而不是变量名。例如,若a和b为int型变量,如果写成scanf("%f%f%f",a,b,c)是错误的。

    scanf 的使用小结:
    1 在 scanf 的“输入参数”中,变量前面的取地址符&不要忘记。
    2 scanf 中双引号内,除了“输入控制符”外什么都不要写。
    3 “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。
    4 “输入控制符”的类型和变量所定义的类型一定要一致。对于从键盘输入的数据的类 型,数据是用户输入的,程序员是无法决定的,所以在写程序时要考虑容错处理。
    5 使用 scanf 之前先用 printf 提示输入。

    展开全文
  • C语言scanf与gets的区别

    2021-02-07 17:22:49
    C语言scanf与gets的区别 c语言中scanf与gets函数都可以输入字符到终端,那么,他们的区别是什么呢。 scanf输入的格式更多样,包括字符、字符串等,且可以一次性输入多个;gets输入只局限于字符串。 scanf("%d%s",...

    C语言scanf与gets的区别

    c语言中scanf与gets函数都可以输入字符到终端,那么,他们的区别是什么呢。


    1. scanf输入的格式更多样,包括字符、字符串等,且可以一次性输入多个;gets输入只局限于字符串。

      scanf("%d%s",a,b);
      
    展开全文
  • c语言scanf相关

    2017-03-04 16:01:26
    c语言scanf相关1. 空格相关: 如果你用scanf()函数的话,遇到空格会返回; 如果需要输入一个字符串,但是有空格怎么办:但是有时候用该方法时,会提示gets不安全,怎么办?char str[10]; scanf ("%[^\n]%*c", ...
  • C语言scanf的常用筛选功能使用 文章目录C语言scanf的常用筛选功能使用小例子一些常用限定符 有一个这样的需求就是使用scanf限定输入数字。我们该怎么解决呢? 答案是使用:%[],表示要读入一个字符集合。 小例子 ...
  • C语言scanf()解析

    2019-09-08 16:26:19
    C语言scanf()解析 从键盘到内存scanf原型scanf中参数中 不属于格式指令的字符 的作用空白字符非空白字符非空白字符在格式说明符后面非空白字符在格式说明符前面补充:参考网址: 从键盘到内存 键盘输入“a b c...
  • C语言scanf函数以及缓存详解

    千次阅读 多人点赞 2018-08-21 00:18:27
    自学到C语言scanf(),printf(),getchar(),gets();的时候,我觉得这个几个函数并没有什么特别的难得,但是后来写程序的时候却出现了一些小错误总是解决不了;上网查了查,是对于C语言缓存的不理解,所以今天本篇博文就...
  • C语言scanf连续输入两个字符

    千次阅读 2021-01-26 09:55:32
    C语言scanf函数连续输入两个字符出现的问题 上代码 //初始代码,输入1,2,a,b,每次输入按了一次回车 int a,b; char c,d; scanf("%d%d",&a&b); scanf("%c%c",%c&d); printf("%d\n%d\n",a,b); printf("%...
  • C语言scanf()函数返回值 代码例子: #include<stdio.h> int main(){ int num1=0,num2=0; int value= scanf("%d %d",&num1,&num2); printf("%d",value); printf("\nnum1= %d\nnum2= %d",num1,num2)...
  • c语言scanf输入字符We have to read tree values: integer, float and then character using only one scanf() function and then print all values in separate lines. 我们只需要使用一个scanf()函数读取树值:...
  • C语言scanf()什么时候用&,什么时候又不用?为什么要用&,这样用的好处是什么?
  • 关于C语言 scanf 的三种不同的输入方式 第一种:先输入要读取多少个数,从后面的数字中读取相应个数 代码示意如下 int n,x,flag; scanf("%d",&n); for(flag=0;flag<n2;flag++) { scanf("%d",&b); ...
  • C语言scanf容易引发的bug int hoge; char buf[256]; printf("&hoge %p\n", &hoge); //(1) fgets(buf, sizeof(buf), stdin); sscanf(buf, "%d", &hoge); //(2) scanf("%d", &hoge); 在使用scanf
  • C语言scanf读取字符串遇到的问题

    千次阅读 2018-10-16 23:50:14
    C语言scanf读取字符串遇到的问题 刷题的时候碰到的,记录下 关于scanf读取字符串 标题1 在串前遇到空格,跳过,寻找下一个非空格的字符 2 在串中遇到空格时,结束字符串输入 但是你输入的字符串又有很多空格,此时该...
  • C语言scanf为啥有时候要输入两次(解析)

    千次阅读 多人点赞 2020-03-18 20:57:13
    C语言scanf为啥有时候要输入两次(解析) 我们先看一下这个例子: 我们看上面的图片,一个scanf()一个格式控制符我们却输入了两次,这是因为我们在scanf()里加入了’ \n '。 简单地说:如果在格式字符串(出现了...
  • C语言scanf函数用法详细解释!

    万次阅读 多人点赞 2016-07-21 10:53:45
    函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值...
  • C语言 scanf()和gets()函数的区别

    千次阅读 多人点赞 2018-03-21 00:12:59
    C语言 scanf()和gets()函数的区别1.相同点:scanf( )函数和gets( )函数都可用于输入字符串2.不同点:两者在功能上有所区别,具体区别如下:要实现如下需求“从控制台输入字符串”有如下两种实现方式:1&gt;使用...
  • c语言scanf返回值

    千次阅读 2018-07-22 15:34:16
    1. scanf 函数是有返回值的,它的返回值可以分成三种情况  1) 正整数,表示正确输入参数的个数。例如执行 scanf("%d %d", &amp;a, &amp;b);  如果用户输入"3 4",可以正确输入,返回2...
  • C语言scanf返回值

    千次阅读 2018-01-14 14:32:40
    scanf 函数是有返回值的,它的返回值可以分成三种情况 1) 正整数,表示正确输入参数的个数。例如执行 scanf(“%d %d”, &a, &b); 如果用户输入”3 4”,可以正确输入,返回2(正确输入了两个变量); 如果用户...
  • 输入指令scanf如果把计算机比作一个人,那么printf指令是让计算机具备说的能力,而scanf指令是让计算机具备听的能力。用术语来描述,计算机说的能力是“输出”,计算机听的能力是“读入”。输入指令scanf,也称为...
  • C语言scanf返回值问题

    2017-03-09 13:55:31
    程序如下: #include void changetime(int);...一个将输入的分钟转化为小时的程序,while判定中当scanf失败时返回EOF循环结束,无论输入什么scanf都不会返回-1,无论是字母还是浮点数,只会一味的死循环,求解
  • 一、函数 scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定...
  • C语言scanf的用法

    千次阅读 2018-04-09 14:16:54
    scanfC语言中的标准输入函数。函数原型:int scanf( const char *format, ... );其调用格式为: scanf("&lt;格式化字符串&gt;",&lt;地址表&gt;);举例如下:scanf("%d%d", &...
  • c语言scanf读取一行

    2019-09-26 08:18:58
    c语言scanf函数可以使用%s来读取一个字符串,但是遇到空格就不会读取后面的内容了。如果需要读取一整行的字符肯定就有问题了。 经过一阵google找到了解决方法,记录下。 就是在scanf中使用%[ ]参数。这个参数的...
  • C语言scanf读入一行产生的问题:多于一个换行符未读入问题描述解决方法: 问题描述 使用scanf读入一整行时,由于遇到\n停止,于是标准输入流里还有一个\n 解决方法: 在后面加上getchar,“吸收掉换行符” scanf("%...
  • c语言scanf返回值问题

    2018-06-11 15:24:08
    scanf函数返回值: 1.scanf()函数有返回值且为int型。 2.scanf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。 例如:scanf("%d%d", &amp;a, &amp;b); 如果...
  • C语言 scanf 总结

    2014-01-04 11:15:22
    对于我这种C语言菜鸟程序员来说,一碰到输入第一想到的就是scanf,正是因为这样在scanf里吃了很多亏。好吧,这里帮自己总结一下: 函函数原型: 1 int scanf( const char *format, ... ); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,108
精华内容 8,443
关键字:

c语言scanf

c语言 订阅