- 为什么要吃回车
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<stdio.h>
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);
}