精华内容
下载资源
问答
  • 2022-01-24 10:31:01

    1. scanf("输入控制符",输入参数);

    将从键盘键入的字符转化为输入控制符所规定格式的数据,然后存入以输入参数的值为地址的变量中。

    2. scanf("非输入控制符 输入控制符",输入参数);

    功能与(1)相同,但是从键盘输入的时候必须把非输入控制符原样输入,否则存入的是一个垃圾值。

    scanf 高质量用法:

    1. 使用 scanf 之前,最好先用 printf 提示用户以何种方式输入

    2 scanf中尽量不要使用非输入控制符,尤其不要使用 \n

    3. 可以编写代码对用户的非法输入做适当的处理:

    while ((ch = getchar()) != '\n')

    continue;

    VC++6.0运行结果:

     

    更多相关内容
  • 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用法详解

    2022-05-08 23:04:03
    看了一下glibc scanf的源码之后,对scanf使用方法有了更深入的理解,下面给大家讲解一下scanf函数的用法. 1.以%开头的字符串 %[argpos$] [I'*] [maximum field width] [type modifiers] [arg] argpos: 指定了...

    看了一下glibc scanf的源码之后,对scanf的使用方法有了更深入的理解,下面给大家讲解一下scanf函数的用法.

    1.以%开头的字符串

    %[argpos$] [I'*] [maximum field width] [type modifiers] [arg]
    
    1. argpos: 指定了参数的位置
    2. I’*
      • I:use locale’s digits
      • ': Group numbers
      • *: 跳过这个参数
    3. maximum field width : 从输入的内容中最多读取几个字符
    4. type modifiers:
      - hh 写 一个字节
      - h 写两个字节
      - 写四个字节
      - l 写八个字节
      - ll 写八个字节
      - m 有scanf分配缓冲区
    5. arg
      - % 输出%
      - n将前面已经读取的字符个数写到参数指定的位置
      - c 字符
      - C wchar_t
      - s 字符串
      - S wchar_t字符串
      - p 地址
      - x/X 十六进制字符串
      - u/d 无符号/有符号整数
      - e/E/f/F 浮点数
      - [] []内字符以外的字符作为定界符
      - [^] [] 内的字符作为定界符

    2.非%开头的字符串

    读取一个字符,与之相比较,不同的话scanf失败。

    3.演示

    3.1 例1

    char*p = NULL;
    int n = 0;
    scanf("Hello%2$10ms%3$n",0,&p,&n);
    

    解析流程:

    1. scanf会从格式串的第一个字符开始遍历,若字符不是%,那么与读入的字符相比较,相同的话,遍历下一个字符。
    2. 当scanf遇到%的时候,之后读取到了2,读取到$后,scanf会把数据保存在第二个参数
    3. 继续解析10 ,这个10的含义就是,从输入的内容中最多读取10个字符。
    4. 解析到m,scanf会自己创建一个缓冲区,把从输入的内容中转换的结果写到这个缓冲区内,最后把缓冲区地址写到参数指定的位置
    5. 解析到s,scanf之后将会读取字符串到指定的buffer内.
    6. 后面的%3 $n同理,scanf会把前面已经读取的字符数写到第三个参数指定的地址处。

    接着我们输入 HelloAAAAAAAAAAAA
    Hello与格式串中开始位置的Hello相匹配,继续看后面
    %2$10ms,最多读取10个字符,并且自己创建缓冲区,把字符串,也就是10个A读到自己创建的缓冲区内,并把地址写到第二个参数指定的位置。
    %3 $n ,前面读取了15个字符,所以这里会把15写到第三个参数指定的位置
    运行看一下:
    在这里插入图片描述

    再输入内容 Helaaaaaa看一下,匹配成功三个字符,然后第四个失败,scanf结束,最后p 任然是0,n任然为0

    在这里插入图片描述

    3.2 例二

    int val = 0;
    scanf("Haha%2$10hhd",0,&val);
    

    解析流程:

    1. 匹配Haha
    2. 2$将转换后的结果写到第二个参数指定的位置
    3. 10从输入内容中最多读取10个字符
    4. 只写1个字节

    接下来输入内容Haha000000000000000123,由于匹配Haha之后最多读取10个字符,所以最后得到的整数是0。
    在这里插入图片描述
    接着我把这里val的初始值改一下,改为0xabcd,然后输入同样的内容。
    在这里插入图片描述
    最后的val并不是0,为什么呢???
    原因是我们这里指定了只写一个字节.所以最后val的值是0xab00,只有低字节发生了变化。
    在这里插入图片描述

    3.3例三

    char buffer[256] = {0};
    int n = 0;
    scanf("Hello%2$10[^abc]%1$n",&n,buffer);
    

    解析流程:

    1. 匹配Hello
    2. 2$将转换结果写到第二个参数指定的位置
    3. 10最多读取10个字符
    4. [^abc],abc这三个字符中的任意一个都是定界符
    5. %1 $n将前面读取的字符个数写到第一个参数指定的位置

    接下来输入内容: Hellohhhhhhhhhhhh,匹配Hello之后,最多读取10个字符到第二个参数里面,所以最后buffer里面有10个h,%1 $n,解析到这里时,前面读取了15 个字符,所以会把15写到n里面。
    在这里插入图片描述
    接下来输入 Hellohhhhhh,然后按下回车,我们会发现,什么也没输出。
    在这里插入图片描述
    为什么呢???因为我们指定了定界符为abc,此时的换行符已经不是定界符了,换行符也被读到了buffer里面。
    我们继续输入gga,然后回车。scanf会把gg读到buffer里面,然后遇到a,结束。一共读取了 5(Hello) + 6 (hhhhhh) + 1 (\n) + 2(gg) = 14个字符
    在这里插入图片描述
    并且我们可以发现,hhhhhh和gg中间是有一个换行符的,说明换行符确实被读进去了。

    End

    上面这些用法是我在阅读scanf的源码时发现的,(glibc-2.23),msvc上可能有一部分功能是无法使用的,或者某些功能并不是标准里面含有的。有一部分这里没有介绍到,感兴趣的话大家自己实验吧(有些没用过,代码太多,最后懒得看了,毕竟主要是为了找到哪里调用了malloc来触发malloc_hook)

    展开全文
  • c语言scanf用法

    千次阅读 2019-07-10 20:28:30
    函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,…]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值...

    函数名: scanf
    功 能: 执行格式化输入
    用 法: int scanf(char *format[,argument,…]);
    scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。
    其调用格式为: scanf("<格式化字符串>",<地址表>);
    scanf()函数返回成功赋值的数据项数,出错时则返回EOF。
    其控制串由三类字符构成:
    1。格式化说明符;
    2。空白符;
    3。非空白符;

    (A) 格式化说明符

    格式字符 说明
    %a 读入一个浮点值(仅C99有效)
    %A 同上
    %c 读入一个字符
    %d 读入十进制整数
    %i 读入十进制,八进制,十六进制整数
    %o 读入八进制整数
    %x 读入十六进制整数
    %X 同上
    %c 读入一个字符
    %s 读入一个字符串
    %f 读入一个浮点数
    %F 同上
    %e 同上
    %E 同上
    %g 同上
    %G 同上
    %p 读入一个指针
    %u 读入一个无符号十进制整数
    %n 至此已读入值的等价字符数
    %[] 扫描字符集合
    %% 读%符号

    附加格式说明字符表
    修饰符 说明
    L/l 长度修饰符 输入"长"数据
    h 长度修饰符 输入"短"数据
    W 整型常数 指定输入数据所占宽度

    • 星号 空读一个数据
      hh,ll同上h,l但仅对C99有效。

    (B) 空白字符
    空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符,空白符可以是space,tab,newline等等,直到第一个非空白符出现为止。
    (C) 非空白字符
    一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。
    三、scanf函数的使用范例
    例1

    #include<stdio.h>
    int main()
    {
    	int a;
    	int b;
    	int c;
    	while(1) 
    	{
    	printf("请输入a、b、c的值:");
    	scanf("%d%d%d",&a,&b,&c);
    	printf("a=%d b=%d c=%d \n",a,b,c);
     	}
     } 
    

    输出:在这里插入图片描述
    在对于a,b,c的赋值中,无论我们如何敲写空白字符和回车字符都不会影响,一直到abc的值被赋完才会结束一次的赋值。
    例2
    #include<stdio.h>
    int main()
    {
    int a;
    int b;
    int c;
    while(1)
    {
    printf(“请输入a、b、c的值:”);
    scanf("%d,%d,%d",&a,&b,&c);
    printf(“a=%d b=%d c=%d \n”,a,b,c);
    }
    }
    输出:在这里插入图片描述
    在例2中我们对它的输入格式做了修改。结果如上图所示。可以发现在输入数值时,其他字符可以出现在数值前,而不可以出现在数值后,这样将会造成程序的错误。
    例3

    #include <stdio . h>
       int main( )
    {
    char a;
    while( 1 )
    {
    pr intf( "input a:" );scanf( "%c " , &a);
    if(a=='+')
    pr intf("get +\n");
    if(a==' - ')
    pr intf("get -\n" );
    }
      }
    

    在这里插入图片描述
    在scanf函数中,对于字符的接收需要注意对于回车字符的使用
    出现这种情况我们可以添加一句getchar();来进行修改
    例4

    include<stdio .h> 
    int main( )
    {
    char a;
    while( 1 )
    {
    printf("input a:" );
    scanf( "%c" ,&a) ;
    getchar();
    if(a== '+')
    pr intf("get +ln " );
    if( a== '  )
    printf("get -ln' );
    }
    return 0;
    }
    

    相较于例3;我们添加了一句getchar语句则输出为在这里插入图片描述
    我们发现该输出则变成想要的形式了。

    展开全文
  • C语言scanf注意事项

    2020-10-11 22:16:14
    题目:输入三个整数 x,y,z,请把这三个数由小到大输出。 1.程序分析: 我们想办法把最小的数放到 x 上,先将 x与 y 进行比较,如果 x>y 则将x 与 y 的值进行交换, 然后... scanf("%d%d%d",&x,&y,&...
  • 本节介绍输入函数 scanf用法scanf 和 printf一样,非常重要,而且用得非常多,所以一定要掌握。概述scanf的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。该函数的原型为:# includeint scanf(const ...
  • C语言scanf用法

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

    千次阅读 2022-04-24 14:55:06
    scanf():通过键盘将数据输入到变量中,初级使用中一般有以下几种用法及常见错误: 用法一:scanf("输入控制符",输入参数); 功能:将从键盘输入的字符(字符!字符!字符!)转化为输入控制符所规定格式的数据,然后存入...
  • 深入了解一下C语言scanf()库函数

    多人点赞 2022-04-13 10:48:06
    声明:本人是正在学习C语言的小白一枚,以下是本人目前对scanf函数的理解,如有错误欢迎评论区指正。 一、scanf函数的定义 二、scanf函数的返回值 scanf函数返回成功读入的数据项数返回值为int型,读入数据时...
  • c语言scanf用法疑问

    2022-04-03 17:37:09
    若x和y均定义为int 型,z定义为double型,以下不合法的scanf()函数调用 ) o A.scanf ("%d%1x, %le”, &x, &y, &z); B.scanf(“%2d*%d%lf”,&x,&y,&z); C.scanf ("%X%*d%0",&x, &y); D.scanf(%x%o%6.2f”...
  • c语言scanf用法

    千次阅读 2019-07-10 18:09:40
    c语言scanf用法 格式:scanf(“输入控制符”, 输入参数); 1/当scanf控制符是字符”%c“的时候,要注意回车,回车也是一个字符,当我们连续输入两个整数,回车/空格都属于字符,都会被下一轮的scanf(“%c”,&...
  • C语言scanf与scanf_s

    2021-05-21 12:59:01
    C语言scanf与scanf_s0我打编译器是microsoft visual studio 2005,我的源程序如下,注意注释的地方,就是scan函数中的scanf_s函数,程序运行正常,但是当输入字符串大于或等于8个字符时,链表的输出就不正常了,7个...
  • c语言scanf的基本用法

    万次阅读 2021-05-19 05:07:39
    前言scanf()是C语言的格式输入函数,和printf函数一样被声明在stdio.h头文件中,它的基本使用很简单:1 int a;2 scanf("%d",&a);//程序执行到这里时,就等待用户输入;它接收的是变量的地址//所以一般情况下除了...
  • C语言 scanf的工作原理

    千次阅读 2022-01-03 22:06:39
    先来观察一段代码和运行结果: #include <iostream> using namespace std; int main() { int a;...该代码明明有两个 scanf ,但在运行过程中,执行完第一个 scanf 和 printf 后,代码直接
  • 【注意事项】 scanf 函数的一般形式: scanf(格式控制, 地址列表); 如果在格式控制字符串中除了格式声明以外还有其他字符,则在输入数据时在对应的位置上应输入与这些字符相同的字符。...【C语言代码实例】在下面的
  • c语言scanf返回值

    2021-05-21 04:55:42
    1. scanf 函数是有返回值的,它的返回值可以分成三种情况1) 正整数,表示正确输入参数的个数。例如执行 scanf("%d %d", &a, &b);如果用户输入"3 4",可以正确输入,返回2(正确输入了两个变量);如果用户输入...
  • 中山大学牛人总结的scanf函数的技巧,看了之后对scanf函数理解会更加深刻。
  • C语言scanf匹配用法

    千次阅读 2018-12-26 12:41:52
    不同系统的换行符制定 不同系统之间传递文本文件 函数scanf参数列表及返回值 输入缓冲区清除剩余字符 指定字符串的输入长度 输入支持含空格的字符串 灵活指定输入长度和格式
  • c中scanf用法

    2022-01-09 12:41:40
    1.scanf要遵守格式 2.注意%d%d 和%d %d(后者中间有空格)在输入数据两者没有区别 在输入数字的时候中间需要加空格(至少一个,多个没有影响) 3.使用double的不同格式 4.%c的用法:注意空格和转移字符也占一位 ...
  • C语言scanf()常见报错问题

    千次阅读 多人点赞 2021-06-04 17:23:36
    1.提示 scanf 未申明 2.1.缺少' ; ' 错误 3.进行便捷操作 目录 1.提示 scanf 未申明 2.1.缺少' ; ' 错误 3.进行便捷操作
  • C语言scanf_s()函数的用法

    万次阅读 多人点赞 2019-07-10 22:01:12
    C语言scanf_s()函数的用法 前言 今天开始学习C语言,看书学的挺快的,感觉也不能,就想着敲下代码,结果错误百出,差点不想学了,果然编程是敲会的。下面说说第一个程序遇到的问题与心得 scanf_s()前身——scanf() ...
  • #include &lt;stdio.h&gt; int main() ... scanf("%32[^0-9]s",str); printf("%s\n",str); return 0; }可以通过%后面的参数设定接收的字符数组最大长度,截断字符。
  • 学习c++之前需要将c语言的知识了解一下,c是计算机语言基础。那么学习c语言就可以从c语言的输入和输出开始学习吧。在以后的学习c语言之路上会经常用到。 一、首要知识 1.输出类型:%d整型, %c 字符,%f 浮点数 ...
  • C语言 scanf三种不同的输入方式

    千次阅读 2020-03-04 01:25:31
    关于C语言 scanf 的三种不同的输入方式 第一种:先输入要读取多少个数,从后面的数字中读取相应个数 代码示意如下 int n,x,flag; scanf("%d",&n); for(flag=0;flag<n2;flag++) { scanf("%d",&b); ...
  • C语言scanf输入汇总

    千次阅读 2021-12-06 20:40:47
    C语言中,有多个函数可以从键盘获得用户输入: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。 getchar()、getche()、getch():这三个函数都用于输入单个字符。 gets():获取一行数据,并作为...
  • 解决方法scanf后加一个getchar()。关于scanf还有一个问题,可以看我的另一篇博客scanf使用不当造成无限循环两个scanf()的例子int main(void){char a;char b;printf("Please enter a letter:");scanf("%c", ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,031
精华内容 21,612
关键字:

c语言scanf用法