【C语言】吃回车的原因及其方法

  • 为什么要吃回车

c语言中在读取键盘数据时,一般是带缓存的数据输入。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,但是scanf()函数对这个回车确认符并不进行处理,回车符会留在输入缓存区中。而下一次读取字符是直接读取缓冲区中的字符。因此,在下一个读“字符”操作函数(getchar, scanf("%c"), gets(),等)运行时,会读到回车字符。而在读数值型或字符串数据时,scanf会从第一个非空白字符(空白字符指:回车,空格,TAB键)开始读取,自动忽略前面的空白字符,并用空白字符结束该类型数据的输入。因此,判断是否一定要在scanf后面跟个 getchar()吃回车,要看下一个输入的数据类型是什么,如果是读字符类操作,一般需要吃回车操作。

  • 吃回车的几种方法

首先因为本人还是小白,路还很长,慢慢学习积累,打算以后看到了好的新的方法再加。目前只有两种方法可供参考。
1、在scanf或其他输入操作后加getchar();
2、用"%*c"吃掉回车,%*c为空字符,即不存储字符的字符,比如你可以这样写:scanf("%c%c%c%*c",&a,&b,&c)!=EOF;
好了,看看下面这道题吧…

  • Description

有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。

  • Input

数字n
一行字符串
数字m

  • Output

从m开始的子串

  • Sample Input

6
abcdef
3

  • Sample Output

cdef

  • 示例答案
#include
int main()
{
	int j,i,n,m;
	char a[100],b[100];
	scanf("%d",&n);
	getchar();	//此处即吃回车操作
	for(i=0;i<n;i++)
	{
        scanf("%c",&a[i]);
	}
	scanf("%d",&m);
	for(i=m-1,j=0;i<n;i++,j++)
	{
        b[j]=a[i];
	}
    b[j]='\0';
	puts(b);
}

你可能感兴趣的:(【C语言】吃回车的原因及其方法)