关于C语言的问题~ C语言程序设计(第四版)里说,在用键盘输入信息时,这些字符先暂存在键盘的缓冲
关于C语言的问题~C语言程序设计(第四版)里说,在用键盘输入信息时,这些字符先暂存在键盘的缓冲器中,只有按了Enter键才把这些字符一起输入计算机中,然后按先后顺序分别赋...
关于C语言的问题~
C语言程序设计(第四版)里说,在用键盘输入信息时,这些字符先暂存在键盘的缓冲器中,只有按了Enter键才把这些字符一起输入计算机中,然后按先后顺序分别赋给相应的变量。那比如这张图里的程序,它里面有一个用来接收最后输入的回车符的ch=getchar();的语句,但它定义的数组是字符型,那这个回车符是怎么回事,它难道是和前面输入的字符一起送去计算机里吗,那这个数组里岂不是含有回车符了? 展开
C语言程序设计(第四版)里说,在用键盘输入信息时,这些字符先暂存在键盘的缓冲器中,只有按了Enter键才把这些字符一起输入计算机中,然后按先后顺序分别赋给相应的变量。那比如这张图里的程序,它里面有一个用来接收最后输入的回车符的ch=getchar();的语句,但它定义的数组是字符型,那这个回车符是怎么回事,它难道是和前面输入的字符一起送去计算机里吗,那这个数组里岂不是含有回车符了? 展开
1个回答
展开全部
用来接受回车的是ch, 它是一个变量不是数组, 而用来保存文件名的是一个字符数组.
C语言几乎所有输入的函数都是先检查输入缓冲区是否为空, 如果空, 就让键盘输入, 输入的字符如果是回车符, 就结束输入, 然后输入的数据保存到输入缓冲区(就包括那个回车符), 最后再从缓冲区中读数据, 其中如果遇到非法字符, 结束读取, 返回EOF. 如果遇到空白符(回车, 空格)就表示这个数据的结束.
例如:scanf("%d", &i);scanf("%d", &i);
先是输入, 如果输入了123\n
那么, scanf在读取123的时候, 是正常的, 然后读取到\n, 它是空白符, 于是就结束输入, 而这个空白符是没会被删除的, 它还在输入缓冲区里.
然后后面还有一个要输入的, 因为输入缓冲区不为区, 所以直接读取数据, 但是第一个读到的数据就是空白符, 而后面也没有数据了, 所以返回EOF. 这样就会导致输入错误.
所以一般来说scanf前面都会加一个空格如: scanf(" %d", &i);这样那个空格就会和上一次输入留下的回车符抵消.
C语言几乎所有输入的函数都是先检查输入缓冲区是否为空, 如果空, 就让键盘输入, 输入的字符如果是回车符, 就结束输入, 然后输入的数据保存到输入缓冲区(就包括那个回车符), 最后再从缓冲区中读数据, 其中如果遇到非法字符, 结束读取, 返回EOF. 如果遇到空白符(回车, 空格)就表示这个数据的结束.
例如:scanf("%d", &i);scanf("%d", &i);
先是输入, 如果输入了123\n
那么, scanf在读取123的时候, 是正常的, 然后读取到\n, 它是空白符, 于是就结束输入, 而这个空白符是没会被删除的, 它还在输入缓冲区里.
然后后面还有一个要输入的, 因为输入缓冲区不为区, 所以直接读取数据, 但是第一个读到的数据就是空白符, 而后面也没有数据了, 所以返回EOF. 这样就会导致输入错误.
所以一般来说scanf前面都会加一个空格如: scanf(" %d", &i);这样那个空格就会和上一次输入留下的回车符抵消.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询