精华内容
下载资源
问答
  • 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用法

    2021-01-22 12:37:53
    scanf用法 scanf中的格式控制符不能加宽度限定词,指定数据的宽度。 如 scanf("%.2lf",&n); 这是错误的! 应写为 scanf("%lf",&n);

    scanf用法


    scanf中的格式控制符不能加宽度限定词,指定数据的宽度。

    scanf("%.2lf",&n);
    

    这是错误的!
    应写为

    scanf("%lf",&n);
    
    展开全文
  • 中山大学牛人总结的scanf函数的技巧,看了之后对scanf函数理解会更加深刻。
  • 本节介绍输入函数 scanf用法scanf 和 printf一样,非常重要,而且用得非常多,所以一定要掌握。概述scanf的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。该函数的原型为:# includeint scanf(const ...

    本节介绍输入函数 scanf 的用法。scanf 和 printf

    一样,非常重要,而且用得非常多,所以一定要掌握。

    概述

    scanf

    的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。该函数的原型为:

    # include

    int scanf(const char *format, ...);

    它有两种用法,或者说有两种格式。

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

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

    下面给大家举个例子:

    #include

    int

    main(void)

    {

    int

    i;

    i =

    10;

    printf("i = %d\n", i);

    return

    0;

    }

    我们前面都是像这样写的,即直接给变量 i

    赋一个值。但是这样写功能比较弱,因为这个值就变成一个“死值”了,它只能是

    10,不可能是其他值,除非在程序中修改。很多时候我们希望这个值不是由程序员在程序中指定的,而是在程序运行的过程中由用户从键盘输入的。用户输入多少,变量i就是多少,这样程序的功能就更加灵活了。

    那么如何实现在程序运行的过程中由用户从键盘输出值呢?用 scanf 即可实现:

    #

    include

    int

    main(void)

    {

    int

    i;

    scanf("%d", &i); //&i 表示变量 i

    的地址,&是取地址符

    printf("i = %d\n", i);

    return

    0;

    }

    “输入控制符”和“输出控制符”是一模一样的。比如一个整型数据,通过 printf

    输出时用%d输出,通过 scanf 输入时同样是用%d。

    要想将程序中的 scanf

    行弄明白,首先要清楚的是:我们从键盘输入的全部都是字符。比如从键盘输入 123,它表示的并不是数字 123,而是字符 '1'、字符

    '2' 和字符 '3'。这是为什么呢?

    操作系统内核就是这样运作的。操作系统在接收键盘数据时都将它当成字符来接收的。这时就需要用“输入控制符”将它转化一下。%d的含义就是要将从键盘输入的这些合法的字符转化成一个十进制数字。经过 %d 转化完之后,字符

    123 就是数字 123 了。

    第二个要弄清楚的是:&是一个取地址运算符,&后面加变量名表示“该变量的地址”,所以&i就表示变量 i 的地址。&i又称为“取地址i”,就相当于将数据存入以变量 i

    的地址为地址的变量中。

    那么以变量 i 的地址为地址的变量是哪个变量呢?就是变量 i。所以程序中 scanf

    的结果就把值 123 放到变量i中。

    综上所述,scanf 语句的意思就是:从键盘上输入字符

    123,然后%d将这三个字符转化成十进制数 123,最后通过“取地址 i”找到变量 i 的地址,再将数字

    123 放到以变量 i 的地址为地址的变量中,即变量 i 中,所以最终的输出结果就是i=123。

    注意,为什么不直接说“放到变量i中”?而是说“放到以变量 i

    的地址为地址的变量中”?因为这么说虽然很绕口,但是能加强对 &i 的理解,这么说更能表达 &i

    的本质和内涵。很多人在学习 scanf 的时候,经常将“变量 i”和“变量 i 的地址”混淆,从而思维开始混乱,等深刻了解

    &i 的含义之后就可以不那么说了。

    以上是 scanf 的最简单用法,也是最常用、最基本、最重要的用法。这样通过 scanf

    就可以在程序运行的过程中由用户来指定变量 i 的值,这与在程序中赋值相比较功能更强大。

    2) scanf("输入控制符非输入控制符",

    输入参数);

    这种用法几乎是不用的,也建议你们永远都不要用。但是经常有人问,为什么 printf

    中可以有“非输出控制符”,而 scanf

    中就不可以有“非输入控制符”。事实上不是不可以有,而是没有必要!下面来看一个程序:

    #

    include

    int

    main(void)

    {

    int

    i;

    scanf("i = %d", &i);

    printf("i = %d\n", i);

    return

    0;

    }

    在 printf 中,所有的“非输出控制符”都要原样输出。同样,在 scanf

    中,所有的“非输入控制符”都要原样输入。所以在输入的时候i=必须要原样输入。比如要从键盘给变量 i 赋值

    123,那么必须要输入i=123才正确,少一个都不行,否则就是错误。

    所以 scanf 中%d后面也没有必要加\n,因为在 scanf 中\n不起换行的作用。它不但什么作用都没有,你还要原样将它输入一遍。

    所以在 scanf

    的使用中一定要记住:双引号内永远都不要加“非输入控制符”。除了“输入控制符”之外,什么都不要加,否则就是自找麻烦。而且对于用户而言,肯定是输入越简单越好。

    一次给多个变量赋值:

    #

    include

    int

    main(void)

    {

    int

    i,

    j;

    scanf("%d%d", &i, &j);

    printf("i = %d, j = %d\n", i, j);

    return

    0;

    }

    首先,scanf

    中双引号内除了“输入控制符”之外不要加任何“非输入控制符”。通过键盘给多个变量赋值与给一个变量赋值其实是一样的。比如给两个变量赋值就写两个

    %d,然后“输入参数”中对应写上两个“取地址变量”;给三个变量赋值就写三个

    %d,然后“输入参数”中对应写上三个“取地址变量”……

    但是需要注意的是,虽然 scanf

    中没有加任何“非输入控制符”,但是从键盘输入数据时,给多个变量赋的值之间一定要用空格、回车或者 Tab

    键隔开,用以区分是给不同变量赋的值。而且空格、回车或 Tab

    键的数量不限,只要有就行。一般都使用一个空格。

    此外强调一点:当用 scanf 从键盘给多个变量赋值时,scanf

    中双引号内多个“输入控制符”之间千万不要加逗号,。

    有些人觉得在输入的时候可以用逗号分隔,所以就在“输入控制符”之间用逗号隔开。这样做从程序的角度确实是可以的,但是建议大家不要这样做。在实际编程中这种写法是绝对不允许的,原因有两个:

    首先逗号要原样输入的,有几个就要输入几个,少一个或多一个都不行;

    其次,也是最主要的原因就是输入法的问题,在 scanf

    中是在英文输入法下写的逗号,那么输入的时候如果是中文输入法下的逗号那也是错的。所以用逗号很容易出错。

    最后再次强调:scanf“输入参数”的取地址符&千万不要忘了。这是初学者经常犯的错误。而 printf

    中的“输出参数”是不带取地址符的,不要混淆了。

    使用scanf的注意事项

    1) 参数的个数一定要对应

    在前面介绍 printf

    时说过,“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。这句话同样对 scanf

    有效,即“输入控制符”和“输入参数”无论在“顺序上”还是在“个数上”一定要一一对应。比如:

    #

    include

    int

    main(void)

    {

    char

    ch;

    int

    i;

    scanf("%c%d", &ch);

    printf("ch = %c, i =

    %d\n", ch, i);

    return

    0;

    }

    在 VC++6.0

    中的输出结果是:

    a 6

    ch = a, i = -858993460

    这种错误是初学者经常犯的,由于粗心大意,少写一个参数。更严重的是,这种错误在编译的时候不会报错。printf

    也是一样,即使“输出参数”少写了也不会报错,但从程序的功能上讲这么写就是错的。所以在编程的时候一定要避免这种错误的发生。

    程序中为什么 i=–858993460?这个在《为什么要初始化变量》中讲过,当变量没有初始化的时候就会输出这个值。

    在后面会讲到 scanf

    是缓冲输入的,也就是说从键盘输入的数据都会先存放在内存中的一个缓冲区。只有按回车键后 scanf

    才会进入这个缓冲区和取数据,所取数据的个数取决于 scanf 中“输入参数”的个数。所以上述程序中 scanf

    只有一个输入参数,因此按回车键后 scanf 只会取一个数据。所以变量 ch 有数据,而变量 i

    没有数据,没有数据就是没有初始化,输出就是 –858993460。

    2) 输入的数据类型一定要与所需要的数据类型一致

    在 printf 中,“输出控制符”的类型可以与数据的类型不一致,如:

    #

    include

    int

    main(void)

    {

    int

    i =

    97;

    printf("i = %c\n", i);

    return

    0;

    }

    在 VC++ 6.0 中的输出结果是:

    i = a

    但是在 scanf 中,对于从键盘输入的数据的类型、scanf

    中“输入控制符”的类型、变量所定义的类型,这三个类型一定要一致,否则就是错的。虽然编译的时候不会报错,但从程序功能的角度讲就是错的,则无法实现我们需要的功能。比如:

    #

    include

    int

    main(void)

    {

    int

    i;

    scanf("%d", &i);

    printf("i = %d\n", i);

    return

    0;

    }

    在 VC++ 6.0 中的输出结果是:

    a

    i = -858993460

    输出 –858993460 表示变量未初始化。为什么输入 a,变量 i

    却显示未初始化呢?

    在 scanf 中,从键盘输入的一切数据,不管是数字、字母,还是空格、回车、Tab

    等字符,都会被当作数据存入缓冲区。存储的顺序是先输入的排前面,后输入的依次往后排。按回车键的时候 scanf

    开始进入缓冲区取数据,从前往后依次取。

    但 scanf 中 %d 只识别“十进制整数”。对 %d 而言,空格、回车、Tab

    键都是区分数据与数据的分隔符。当 scanf 进入缓冲区中取数据的时候,如果 %d 遇到空格、回车、Tab

    键,那么它并不取用,而是跳过继续往后取后面的数据,直到取到“十进制整数”为止。对于被跳过和取出的数据,系统会将它从缓冲区中释放掉。未被跳过或取出的数据,系统会将它一直放在缓冲区中,直到下一个

    scanf 来获取。

    但是如果 %d

    遇到字母,那么它不会跳过也不会取用,而是直接从缓冲区跳出。所以上面这个程序,虽然 scanf 进入缓冲区了,但用户输入的是字母

    a,所以它什么都没取到就出来了,而变量 i 没有值,即未初始化,所以输出就是 –858993460。

    但如果将 %d 换成 %c,那么任何数据都会被当作一个字符,不管是数字还是空格、回车、Tab

    键它都会取回。

    不但如此,前面讲过,你从键盘输入 123,这个不是数字 123,而是字符 '1'、字符

    '2' 和字符 '3',它们依次排列在缓冲区中。因为每个字符变量 char 只能放一个字符。所以输入“123”之后按回车,scanf

    开始进入缓冲区,按照次序,先取字符 '1',如果还要取就再取字符 '2',以此类推。

    如果都取完了还有 scanf

    要取数据,那么用户就需要再输入。先写一个程序看一下:

    #

    include

    int

    main(void)

    {

    char

    i,

    j,

    k;

    scanf("%c%c%c", &i, &j, &k);

    printf("i = %c, j = %c, k =

    %c\n", i, j, k);

    return

    0;

    }

    在 VC++ 6.0 中的输出结果是:

    123

    i = 1, j = 2, k = 3

    从这个程序中我们看出,就单纯地输入

    123,不加任何空格,按回车键之后就同我们所讲的一样,分别将字符 '1'、字符 '2' 和字符 '3' 赋给字符变量 i、j 和

    k。

    但是需要提醒大家注意的是,在之前程序中,因为 scanf 是 %d,所以 a

    没有被取出来,还在缓冲区中。当遇到下一个 scanf 是 %c 时它就会被取出来。但是如果一直没有出现

    %c,那么这时就会出现一个问题:scanf怎么取十进制整数?即使使用 %d,但是由于字符 a “挡”在最前面,scanf

    进去先碰到的总是 a,也就无法取到它后面的整数,所以必须先将

    a“弄走”。这就牵涉到“清空输入缓冲区”的概念,这个稍后再讲。

    3) 在使用 scanf 之前使用 printf

    提示输入

    大家想一想,前面写的 scanf 程序有没有不足的地方?

    程序写好之后,编译、链接、执行,然后弹出黑窗口,出现一个光标在那不停地闪。对于编写程序的人来说他知道要输入什么,但是对于用户而言,用户怎么知道是什么意思呢?所以之前的程序都缺少提示信息!因此在使用scanf之前,最好先用printf提示用户以什么样的方式输入,这样可以大大提高代码的质量。看看下面这个程序:

    #

    include

    int

    main(void)

    {

    int

    i,

    j;

    printf("请输入两个值,中间以空格分隔:");

    scanf("%d%d", &i, &j);

    printf("i = %d, j = %d\n", i, j);

    return

    0;

    }

    这样在执行的时候,用户一看就知道是要输入两个值,然后中间用空格隔开。所以这样写就更人性化、智能化了。

    小结

    scanf

    的使用看似细节繁杂,但使用起来非常简单。就目前而言,只要掌握以下五点:

    在 scanf

    的“输入参数”中,变量前面的取地址符&不要忘记。

    scanf 中双引号内,除了“输入控制符”外什么都不要写。

    “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。

    “输入控制符”的类型和变量所定义的类型一定要一致。对于从键盘输入的数据的类型,数据是用户输入的,程序员是无法决定的,所以在写程序时要考虑容错处理,这个稍后再讲。

    使用 scanf 之前先用 printf 提示输入。

    只要掌握了以上五点,scanf

    的使用基本上就没什么问题了。至于其他注意点,到后面讲数组和指针的时候再介绍。

    展开全文
  • scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include。)它是格式...

    scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include

    。(在有一些实现中,printf函数与scanf函数在使用时可以不使用预编译命令#include

    。)它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

    例子1

    #include "stdio.h"

    main()

    {

    float r,L,Area; /*定义float类型变量*/

    printf("输入半径r\n");

    scanf("%f",&r); /*调用获取键盘输入函数*/

    L = 2*3.14*r;

    Area = 3.14*r*r;

    printf("输出周长L与面积Area\n");

    printf("\n L=%f,Area=%f\n",L,Area);

    }

    注:r,l,area是float类型的变量,程序运行中可改变,float是c语言中的一种数据类型。

    输出

    1e29754b0cf6d2b1cbca4fe22710ac4c.png

    例子2

    #include "stdio.h"

    main()

    {

    int i, j;

    char k,l;

    scanf("%d%d", &i, &j);

    scanf("%c%c", &k ,&l);

    printf("i = %d, j = %d ,k =%c ,l =%c \n", i, j ,k ,l);

    }

    输出结果

    6c58e7b117747b47ca96957ed99be73a.png

    C语言的输入输出格式符及附加格式说明符printf(),scanf()

    %d 用以显示十进制数

    %f 显示十进制计数法的float和double类型数值

    %c-----输出一个字符

    616376c8276063837a831a947363e790.png

    scanf 的使用看似细节繁杂,但使用起来非常简单。就目前而言,只要掌握以下五点:

    在 scanf 的“输入参数”中,变量前面的取地址符&不要忘记。

    scanf 中双引号内,除了“输入控制符”外什么都不要写。

    “输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。

    “输入控制符”的类型和变量所定义的类型一定要一致。

    使用 scanf 之前先用 printf 提示输入。

    免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

    展开全文
  • c语言scanf用法

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

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

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

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

    千次阅读 多人点赞 2019-08-09 15:04:29
    本节介绍输入函数 scanf用法scanf 和 printf 一样,非常重要,而且用得非常多,所以一定要掌握。 概述 scanf 的功能用一句话来概括就是“通过键盘给程序中的变量赋值”。该函数的原型为: # include <...
  • C语言scanf_s()函数的用法

    万次阅读 多人点赞 2019-07-10 22:01:12
    C语言scanf_s()函数的用法 前言 今天开始学习C语言,看书学的挺快的,感觉也不能,就想着敲下代码,结果错误百出,差点不想学了,果然编程是敲会的。下面说说第一个程序遇到的问题与心得 scanf_s()前身——scanf() ...
  • c语言scanf用法用法你知道吗?下面小编就跟你们详细介绍下c语言scanf用法用法,希望对你们有用。c语言scanf用法用法如下:printf和scan函数的使用方法一 printf()函数是格式化输出函数, 一般用于...
  • C语言scanf函数用法详细解释

    千次阅读 2018-03-12 15:28:53
    本文为转载,原博客地址:...scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换...
  • C语言scanf函数用法详细解释!!!

    万次阅读 多人点赞 2017-12-21 19:20:03
    函数名: scanf  功 能: 执行格式化输入  用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把...
  • 原文地址](http://blog.csdn.net/qingkong8832/article/details/6667701%20%E5%8E%9F%E6%96%87%E5%9C%B0%E5%9D%80)scanf ...int scanf( const char *format, ... ); 类似函数有 int scanf(const char *f
  • 一、scanf() 的高级用法 (1)指定读取长度 还记得在 printf() 中可以指定最小输出宽度吗?就是在格式控制符的中间加上一个数字,例如,%10d 表示输出的整数至少占用 10 个字符的位置: 如果整数的宽度不足 10,...
  • 为什么这个代码执行到最后一个scanf函数会直接跳过输入呢? [img=https://img-bbs.csdn.net/upload/201708/16/1502887123_427707.png][/img]
  • #include &lt;stdio.h&gt; int main() ... scanf("%32[^0-9]s",str); printf("%s\n",str); return 0; }可以通过%后面的参数设定接收的字符数组最大长度,截断字符。
  • c语言scanf函数讲解

    2018-12-11 20:17:44
    c语言scanf函数讲解 不讲解scanf函数的基础用法,强调一下使用这个函数的时候,需要注意的问题。 程序1:该程序从键盘接收1个字符,然后在屏幕输出该字符,进行10次循环 #include&lt;stdio.h&gt; int ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 671
精华内容 268
关键字:

c语言scanf用法

c语言 订阅