首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

又来送分了`求解决cin gets 等等输入有关问题,ACM题目

2012-11-09 
又来送分了`求解决cin gets 等等输入问题,ACM题目我在学校的在线平台ACM做题,题目如下面,第三个cinm还没

又来送分了`求解决cin gets 等等输入问题,ACM题目
我在学校的在线平台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()最好

热点排行