1 为什么输入回车后,程序就开始运行了?
scanf仅在每一个数据域均有数据,并按回车后结束,程序继续运行。
因为scanf函数规定:在scanf函数接收数据时,遇到以下情况之一则结束一个数据的输入,
(1) 遇到空格、回车、跳格键
(2)遇到宽度结束
(3)遇到非法输入
2 在用%d控制字符输入数据时,系统会忽略掉空白字符,
在用%c控制字符输入数据时,系统不会忽略,而会读取所有字符。
空白字符:space tab newline
运行时按照如下方式输入三个值
int main()
{
int a ,b;
scanf("%d%d",&a,&b);
}
控制台输入:“1空格空格空格3”则系统会忽略多余的空格字符,直到两个数据域a,b都有数据并且输入了回车之后就结束了程序的输入,这时程序数据读入完毕,开始了处理过程。
而像下面这种:
int main()
{
int a ,b;
char c
scanf("%d%d%c",&a,&b,&c);
}
控制台输入:“1空格空格空格2空格m”回车后,a,b,c的值分别为a = 1,b = 2 , c = 空格
3 fgets输入字符串最后需要使用回车结束输入,这时fgets函数就读入了回车符。
所以 fgets函数得到的字符串是带有回车符的,而与之相应的fputs函数输出fgets函数得到的字符串也是带有回车换行符的。
比如:
int main(int argc, const char * argv[])
{
char data[20] = {0};
char data2[20] = {0};
fgets(data, 20, stdin);
fgets(data2, 20, stdin);
fputs(data, stdout);
fputs(data, stdout);
return 0;
}
输入为
hello android
hello iPhone
输出为:
hello android
hello android
自动换行。
补充:
代码:
student s;
fgets(s.name, 20, stdin);
scanf("%c",&s.sex);
scanf("%d%d",&s.number,&s.score);
fputs(s.name, stdout);
printf("%c\n%d\n%d\n",s.sex,s.number,s.score);
fgets函数读入了结尾的回车换行符,所以在下一个字符输入之前,缓冲区已经清空了
scanf读入字符后,也不需要getchar因为,下面的输入 %d整型会自动忽略掉之前输入字符时留下来的空白字符。
scanf(%s),不会清空空白字符