美文网首页
scanf函数

scanf函数

作者: silasjs | 来源:发表于2019-01-28 17:22 被阅读0次

必须用&告诉scanf函数变量的详细地址,才能存储用户输入的数据

int num;
scanf("%i", &num);
printf("num = %i\n", num);

  1. 利用scanf接收多个数据的时候,输入的内容要求和格式化字符串中的一模一样
  2. 如果输入的数据与格式化字符串中的不匹配,那么scanf函数会自动终止
int n1, n2;
scanf("%i,%i", &n1, &n2);
printf("n1 = %i, n2 = %i\n", n1, n2);

控制台:
1,2
n1 = 1, n2 = 2
(内容和格式化字符串中一样)

1 2
n1 = 1, n2 = 0
(内容不匹配格式化字符串)
  1. 如果多个数据之间没有其他分隔符,在控制台输入的时候可以用空格、回车、Tab来作为分隔符

  2. 如果在输入时,输入了多个空格、回车、Tab的话都会被系统忽略,没有影响的。

int n1, n2;
scanf("%i%i", &n1, &n2);
printf("n1 = %i, n2 = %i\n", n1, n2);

控制台:
1 2
n1 = 1, n2 = 2
(空格作为分隔符)

1
2
n1 = 1, n2 = 2
(换行作为分隔符)

1   2
n1 = 1, n2 = 2
(Tab作为分隔符)
  1. 但是,如果格式化字符串中有%c除外。因为空格、回车、Tab都会被当做字符处理
int n1, n2;
char cv;
scanf("%i%c%i", &n1, &cv, &n2);
printf("n1 = %i, cv = %c, n2 = %i\n", n1, cv, n2);

控制台:(空格作为分隔符)
1 a 2
n1 = 1, cv =  , n2 = 0
  1. so,只要连续接收多个数据,格式化字符串中间最好用固定的分隔符(例如:,或者 - )

  2. scanf函数中格式化字符串末尾不能是\n,因为\n是scanf的结束符。如果末尾是\n的话,只能原样输入“\n”或者输入一个不匹配的字符。

int n1, n2;
scanf("%i%i\n", &n1, &n2);
printf("n1 = %i, n2 = %i\n", n1, n2);

控制台:    
123
123

\n
n1 = 123, n2 = 123
  1. scanf的实现原理
  • scanf是阻塞线程的,当它接收数据时,数据是从输入设备接收后保存在输入缓冲区的。
  • 当最后接收到\n结束符时,scanf逐个从输入缓冲区获取可以匹配的数据,如果不匹配就会自动结束,并且不会修改对应变量的值,也不会取走输入缓冲区的数据。
  • 如果在输入前,输入缓冲区已有数据,在结束时仍然会从头开始获取数据。
int n1, n2;
char c1;
scanf("%i%c%i", &n1, &c1, &n2);
printf("n1 = %i, c1 = %c, n2 = %i\n", n1, c1, n2);
    
char c2;
int n3;
scanf("%c%i", &c2, &n3);
printf("c2 = %c, n3 = %i\n", c2, n3);

控制台:(回车结束符在第一行尾)
12 + 34
n1 = 12, c1 =  , n2 = 0
c2 = +, n3 = 34
  1. 如果需要单独取一个字符,而这个字符又被之前输入的字符堵着位置了,或者说输入缓冲区已经有一个其他的字符存在。那么,为了能避免取错,可以使用getchar();函数从输入缓冲区中获取字符。

相关文章

  • 【C语言笔记】<三>Scanf函数

    Scanf函数介绍 scanf函数是一个阻塞式函数:程序会停在Scanf函数出现的地方,直到接收到的数据才会执行后...

  • 2019-01-05学习一下C呀

    问题1:vs2017中scanf函数报错ANSI C中没有scanf_s(),只有scanf(),scanf()在...

  • C语言中的scanf与scanf_s 以及循环输入的问题解决

    Scanf 在标准C中,scanf提供了键盘输入功能。 scanf函数是一个标准库函数,它的函数原型在头文件“st...

  • scanf函数

    scanf函数在接收字符串时就是这么安排的——遇到空格或回车就认为前面的输入已经完成且有效!

  • scanf函数

    scanf函数 一、是什么? C语言下的scanf()函数是样式化输入函数,也称为阻塞式函数,有C语言自带的库提供...

  • scanf函数

    一,使用目的在程序运行的时候,能让用户输入进而操作 二,特点阻塞线程,在sacnf函数完成之后,才能执行下面的代码...

  • scanf函数

    必须用&告诉scanf函数变量的详细地址,才能存储用户输入的数据 利用scanf接收多个数据的时候,输入的内容要求...

  • scanf函数

    正面是一个混合输入字符和数字的程序: getchar()读取所有字符,包括空白、制表符、换行符。scanf()读取...

  • 〔杂谈〕关于scanf方法输入字符类型需要加空格问题分析

    关于scanf函数“%c”前需要加空格问题 如图所见,使用scanf(“%c”)和scanf(“ %c”) 分别输...

  • 11-使用scanf函数需要注意的细节

    1). scanf函数不是printf函数所以后面不要加\n换行. 2). scanf函数后面要写上变量的地址 而...

网友评论

      本文标题:scanf函数

      本文链接:https://www.haomeiwen.com/subject/yhtzjqtx.html