又来送分了`求解决cin gets 等等输入有关问题,ACM题目
又来送分了`求解决cin gets 等等输入问题,ACM题目
我在学校的在线平台ACM做题,题目如下面,第三个cin>>m还没有输入就结束了求解决办法,提交上去通过才行哦,就是main函数那3个连续输入
题目描述
有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
输入
数字n 一行字符串数字m
输出
从m开始的子串
样例输入
6
abcdef
3
样例输出
cdef
我的代码:
------解决方案--------------------
我在学校的在线平台ACM做题,题目如下面,第三个cin>>m还没有输入就结束了求解决办法,提交上去通过才行哦,就是main函数那3个连续输入
题目描述
有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
输入
数字n 一行字符串数字m
输出
从m开始的子串
样例输入
6
abcdef
3
样例输出
cdef
我的代码:
- C/C++ code
include<iostream> #include<cstdio> using namespace std; void abc(char a[],int n,int m,char b[]) { int j=0; for(int i=m-1;i<n;i++) { b[j]=a[i]; j++; } } int main() { char a[100],b[100]; int n,m; cin>>n; gets(a); cin>>m; abc(a,n,m,b); for(int i=0;i<n-m+1;i++) { cout<<b[i]; } return 0; }
------解决方案--------------------
- C/C++ code
#include <iostream> #include<cstdio> using namespace std; void abc(char a[],int n,int m,char b[]) { int j=0; for(int i=m-1;i<n;i++) { b[j]=a[i]; j++; } } int main() { char a[100],b[100]; int n,m; cin>>n; getchar();//缓冲区的回车符,fflush(stdin)也可以 gets(a); cin>>m; abc(a,n,m,b); for(int i=0;i<n-m+1;i++) { cout<<b[i]; //这边应该输出回车... } return 0; }
------解决方案--------------------
一般输入数据是以回车作为结束的,但是回车并没有输入到程序里面去,如果下面再出现要输入字符之类的语句,那么这个回车就先被输入,也就是会出现错误,所以在采集数据的时候,特别是好几种数据一起采集的时候,要十分注意回车符的问题。可以使用cin.get();//吸收回车符
- C/C++ code
#include<iostream> using namespace std; char *mid(char *source,int length,char *destination,int start) { source+=start-1; *(destination+--length+1)=0; while(length>=0) { *(destination+length)=*(source+length--); } return destination; } int main() { char a[100],b[100]; int n,m; cin>>n; cin.get();//吸收回车符 gets_s(a); cin>>m; mid(a,n,b,m); for(int i=0;i<n-m+1;i++) { cout<<b[i]; } return 0; }
------解决方案--------------------
另外除了cin.get()外,二楼提到getchar()以及cin.ignore()或者cin.clear();cin.sync();
都可以用来吸收回车符的
------解决方案--------------------
楼上的方法还是设置个getchar()最好