scanf、getchar、gets的比较

scanf();

输入形式:scanf("%d",&a);   scanf("%s",a)(或scanf("%s",&a),不正规);

一一对应:%d  int %f  float %lf   double %ld  long ;%I64d  __int64 %c  char  %s  char [] 

返回值是,输入n个数据,则返回n,无输入,则返回-1EOF(即end of file),是一个常量-1(可用-1代),操作是用Ctrl+Z

一条语句可输入多个数据。

默认以空格来跳到下一个输入变量,若完成了本次调用时用户本次规定的输入量,可以缓冲起来,继续输入下一次调用该函数时的数据,发出执行指令后做一起处理。该函数不接收空格,多个空格等同一个空格。可以在一次规定的变量之间加上其他的符号来自定义跳转指令。

若完成了本次规定的输入量,回车表示执行本次要的操作;若未完成本次规定的输入量,则作用同于空格,是跳到下一个输入变量。该函数也不接收回车,多个回车等同一个回车。

故而要注意该函数只能正常接收无空格和字符串,当然含有回车符的字符串也是不行的。

  1. #include<stdio.h>  
  2. int main()  
  3. {  
  4.     int a,i=1;  
  5.     char c[100];  
  6.     while(scanf("%d%s",&a,c)!=EOF)  
  7.         printf("NO.%d:%d-%s-\n",i++,a,c);  
  8.     return 0;  
  9. }  

1 e
NO.1:1-e-
1   e
NO.2:1-e-
1
e
NO.3:1-e-

 

抑制字符“*”

格式符的符号“%”后加入“*”,表示读入的数据不赋值给任何变量,不需要为此格式符指定地址参数。

【程序例子】

  1. #include<stdio.h>  
  2. int main()  
  3. {  
  4.     char a,b;  
  5.     int i=1;  
  6.     while(scanf("%c%*c%c%*c",&a,&b))//把输入时的空格和回车忽略  
  7.         printf("NO.%d:%c %c\n",i++,a,b);  
  8.     return 0;  
  9. }  

 

【运行】

【问问】为什么要两次Ctrl+Z才能结束?

 

gets();

输入形式:gets(a);(char a[ ]);

输入的对象是字符串,会把一切能接收进来的字符都接收进来(除了回车),如下面代码1中scanf()后面的空格和回车,以回车表示结束该字符串的输入结束。常以防干扰以代码2的形式和scanf();搭配。但是注意一切能接收是指上一个输入变量不要的字符,如上面的空格和回车,但是形如代码3,上一个回车是上一个字符串必要的结尾符,不能给下一个字符接收了。

代码1.

  1. #include<stdio.h>  
  2. int main()  
  3. {  
  4.     int a,i=1;  
  5.     char c[100];  
  6.     while(scanf("%d",&a)!=EOF)  
  7.     {  
  8.         gets(c);  
  9.         printf("NO.%d:%d-%s-\n",i++,a,c);  
  10.     }  
  11.     return 0;  
  12. }  


1 e
NO.1:1- e-
1  e
NO.2:1-  e-
1
NO.3:1--
e
NO.4:1-e-

代码2.

  1. #include<stdio.h>  
  2. int main()  
  3. {  
  4.     int a,i=1;  
  5.     char c[100];  
  6.     while(scanf("%d",&a)!=EOF)  
  7.     {  
  8.         getchar();  
  9.         gets(c);  
  10.         printf("NO.%d:%d-%s-\n",i++,a,c);  
  11.     }  
  12.     return 0;  
  13. }  

1 w
NO.1:1-w-
1
w
NO.2:1-w-

代码3.

  1. #include<stdio.h>  
  2. int main()  
  3. {  
  4.     int i=1;  
  5.     char c[100],d[100];  
  6.     while(gets(c))  
  7.     {  
  8.         gets(d);  
  9.         printf("NO.%d:-%s-%s-\n",i++,c,d);  
  10.     }  
  11.     return 0;  
  12. }  

e
e
NO.1:-e-e-
we
we
NO.2:-we-we-

getchar();
输入字符的函数,一次输入单个字符,可以接收任意形式的字符,可以把它付给一个字符变量,也可以不要接收器。若要用来输入字符串,则可以用EOF来结尾,形式是while((c=getchar())!=EOF)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值