scanf函数

2019-01-28  本文已影响0人  silasjs

必须用&告诉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的实现原理
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();函数从输入缓冲区中获取字符。
上一篇下一篇

猜你喜欢

热点阅读