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,无输入,则返回-1,EOF(即end of file),是一个常量-1(可用-1代),操作是用Ctrl+Z。
一条语句可输入多个数据。
默认以空格来跳到下一个输入变量,若完成了本次调用时用户本次规定的输入量,可以缓冲起来,继续输入下一次调用该函数时的数据,发出执行指令后做一起处理。该函数不接收空格,多个空格等同一个空格。可以在一次规定的变量之间加上其他的符号来自定义跳转指令。
若完成了本次规定的输入量,回车表示执行本次要的操作;若未完成本次规定的输入量,则作用同于空格,是跳到下一个输入变量。该函数也不接收回车,多个回车等同一个回车。
故而要注意该函数只能正常接收无空格和字符串,当然含有回车符的字符串也是不行的。
#include<stdio.h>
int main()
{
int a,i=1;
char c[100];
while(scanf("%d%s",&a,c)!=EOF)
printf("NO.%d:%d-%s-\n",i++,a,c);
return 0;
}
1 e
NO.1:1-e-
1 e
NO.2:1-e-
1
e
NO.3:1-e-
抑制字符“*”
格式符的符号“%”后加入“*”,表示读入的数据不赋值给任何变量,不需要为此格式符指定地址参数。
【程序例子】
#include<stdio.h>
int main()
{
char a,b;
int i=1;
while(scanf("%c%*c%c%*c",&a,&b))//把输入时的空格和回车忽略
printf("NO.%d:%c %c\n",i++,a,b);
return 0;
}
【运行】
【问问】为什么要两次Ctrl+Z才能结束?
gets();
输入形式:gets(a);(char a[ ]);
输入的对象是字符串,会把一切能接收进来的字符都接收进来(除了回车),如下面代码1中scanf()后面的空格和回车,以回车表示结束该字符串的输入结束。常以防干扰以代码2的形式和scanf();搭配。但是注意一切能接收是指上一个输入变量不要的字符,如上面的空格和回车,但是形如代码3,上一个回车是上一个字符串必要的结尾符,不能给下一个字符接收了。
代码1.
#include<stdio.h>
int main()
{
int a,i=1;
char c[100];
while(scanf("%d",&a)!=EOF)
{
gets(c);
printf("NO.%d:%d-%s-\n",i++,a,c);
}
return 0;
}
1 e
NO.1:1- e-
1 e
NO.2:1- e-
1
NO.3:1--
e
NO.4:1-e-
代码2.
#include<stdio.h>
int main()
{
int a,i=1;
char c[100];
while(scanf("%d",&a)!=EOF)
{
getchar();
gets(c);
printf("NO.%d:%d-%s-\n",i++,a,c);
}
return 0;
}
1 w
NO.1:1-w-
1
w
NO.2:1-w-
代码3.
#include<stdio.h>
int main()
{
int i=1;
char c[100],d[100];
while(gets(c))
{
gets(d);
printf("NO.%d:-%s-%s-\n",i++,c,d);
}
return 0;
}
e
e
NO.1:-e-e-
we
we
NO.2:-we-we-
getchar();
输入字符的函数,一次输入单个字符,可以接收任意形式的字符,可以把它付给一个字符变量,也可以不要接收器。若要用来输入字符串,则可以用EOF来结尾,形式是while((c=getchar())!=EOF)