关于scanf()函数的一些点~

***************************************************************

这个东西真的是无比的重要:错过无数无数遍

1.VS里用scanf_s      2.变量前加&

****************************************************************


一:

#include
  
  
   
   
#include
   
   
    
    
#include
    
    
     
     
#include
     
     
      
      
int main(void)
{
	int num1,num2;
	char ch1,ch2,ch3;
	scanf_s("%d", &num1,20);
	scanf_s("%c", &ch1,20);
	scanf_s("%c", &ch2,20);
	scanf_s(" %c", &ch3,20);
	printf("%d\t%c*\n", num1, ch1);
	printf("*%c*\n", ch2);
	printf("%c\n", ch3);
	system("pause");
	return 0;
}
     
     
    
    
   
   
  
  


当输入为:a         b

输出就如下:


当输入为:a123         *

输出就如下:


也就是说:

1.第一个输入的转换说明为%d,即说明要输入到这个变量里的是一个十进制数。

但是首先输入的是a,这就不符合要求了,scanf会把a放回到输入缓冲区里。

2.这个a就被下面的那个%cd的转换说明读到了。

3.{如果是第一个输入a       b那么第三个转换说明就读到空格,第四个转换说明由于在%c前有一个空格,也就是说,这个转换说明会从第一个非空格的字符开始读。}

    

     {但是对于第二个输入即a123        ,当a被读走后,输入缓冲区里的东西就是123          ,所以下一个被读走的就是1,其次为2。


二:

关于%*d的作用,会使scanf()跳过相应的输入项。

#include
   
   
    
    
#include
    
    
     
     
int main(void)
{
	int a, b, c;
	scanf_s("%*d %*d %d", &a, &b, &c,20);//首先提取到的两个数被丢掉了,没有赋给变量,而最后一个数赋给了变量a,而b,c被随机赋值
	printf("%d %d %d\n", a, b, c);
	system("pause");
	return 0;
}
    
    
   
   



=====使用scanf("%*d%*d%d",&num1,&num2,&num3);
这个意思不是说前两个num被跳过去了,只是把2016赋给了num3,而是说,前面的两个输入相当于提取后就被抛弃了,没有赋给变量,而第三个输入就提取后,赋给第一个变量,而2、3两个变量没有赋值,系统随机赋了一个数。


三:
关于scanf函数的返回值
这个函数的返回值是正确输入的变量的个数。
eg.

#include
   
   
    
    
#include
    
    
     
     
#include
     
     
      
      
#include
      
      
       
       
#define MIN_PER_HOUR 60
int main(void)
{
	int num;
	int a, b;
	num = scanf_s("%d %d", &a, &b,20);
	printf("输入:      3 4\n");
	printf("结果为%d\n", num);
	_flushall();


	num = scanf_s("%d %d", &a, &b, 20);
	printf("输入:3,4\n");
	printf("结果为%d\n", num);
	_flushall();
	//这个函数是定义在stdio.h里面的,在这里用十分有必要
	//因为由于上一个输入,输入流里还有逗号和4没有被提取
	//那么对于下面的这个输入函数,先接触到的肯定是逗号,那么也照样提取不来
	//所以不用再接着输入,函数的返回值就是0了,所以有必要清空一下缓冲区
	
	
	num = scanf_s("%d %d", &a, &b, 20);
	printf("输入:,3 4\n");
	printf("结果为%d\n", num);
	
	system("pause");
	return 0;
}
      
      
     
     
    
    
   
   


结果是:2  1  0

第一个结果是2,这个原因在上面就说过了,scanf函数除了在“%c”这种特殊的情况下会不忽略空白字符外,在其他的情况下都会忽略空白字符,这个也不例外。所以两个变量都成功的得到了值,所以返回值为2。


后面两个结果的原因也比较清楚了~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值