永发信息网

循环1次后cin.getline直接被跳过了,求高人解释~~

答案:1  悬赏:10  手机版
解决时间 2021-02-28 02:06
循环1次后cin.getline直接被跳过了,求高人解释~~
最佳答案
我也不是十分清楚为啥第二次getline的哦时候会读入一个0,导致被跳过,改法倒是简单,如下:(函数结束处加上cin.ignore(); )
void fun()
{
    //define variables
    char *n;    //nifix express
    char *p;    //postfix express
    char temp[maxsize];
    double result;    //result
    double parameter[para_num];    //values of parameters
    int i=0,j=0;
    int counter=0;    //the number of variables

    //to get n
    cout<<"input a nifix express: ";
    cin.getline(temp,maxsize);
    n=new char[strlen(temp)+1];//这里最好+1,字符串需要为''保留一位空间
    p=new char[strlen(temp)+1];//这里最好+1,字符串需要为''保留一位空间
    strcpy(n,temp);

    //to get counter
    while(n[i]!='')
    {
        if(islower(n[i]))    
        {
            counter++;
            i++;

        }
        else
        {
            i++;
        }
    }

    //to initialize variables
    cout<<"input value of parameters: "<    for(j=0;j    {
        cout<<"initializing "<        cin>>parameter[j];
    }
cin.ignore(); //加上这句就行

    //run nifix_to_postfix

}追问貌似是那个for循环的原因:
for(j=0;j {
cout<<"initializing "< cin>>parameter[j];
}
这句之前是正常的。可是到底为什么呢,伤脑筋。。。追答不是啊,第二次进去fun(),cin.getline(temp,maxsize);的时候就不正常,获得的是'\0',我调试过的,第一次是完全正常的,

就是'\n'的影响,把cin.ignore();改为cin.ignore(1024, '\n');也可以,证明确实是'\n’的影响

下面是看到别人的解释,可以参考:

实际上你在每次输入数据的时候会输入一个回车 ‘\n'
cin在读入整数时候会忽略空白碰到非数字('\n')时停止
cin在getline时会把'\n'及之前的内容读回来,哪怕是空行也会读入
cin在读入字符时会把缓冲区内当前字符读入(不会忽略空白)
cin.ignore(1000, '\n')的含义是把缓冲区内从当前字符开始知道'\n'之前字符(如果有1000个的话)忽略掉,实际上你这里假设一行不会超过1000个字符,所以含义是忽略一行

如果你想输入a=1,b=2 name="xxxx", c='y'
所以你的输入是
1回车2回车xxxx回车y回车
cin读入a=1 碰到回车停止 此时1后面的回车还在缓冲区里
cin读b=2时忽略2前面的回车但是停止在2后面的回车
此时你如果掉getline 就会读入一个2后面回车前面的也就是空行 因此此时应当调用一个cin.ignore(1000,'\n')把这个\n忽略掉追问哦,原来是这样,我再好好理解一下。谢谢你的回答啊!追答从那个的说明可以看出,就是因为你for里面有cin>>parameter[j];

而你输入数字后,肯定会按回车吧,这个数字保存给了parameter,而回车就保存到缓存区了,
所以第二次getline获得回车符前面的东西(此时回车符前面已经没内容了),所以才读到空东西,相当于你啥都没输入就按了回车。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
年糕和西瓜能一块吃吗?
在正式的文体里面不要以And,So,But为开头写一
我电脑系统时间走的特别快,一秒中能走3,4秒.
汽车两冲程什么意思
抗震设计时,下列选用的建筑非承重墙体材料哪
c语言输入身份证输出生日,性别,并判断身份证
同方财富大厦停车场在什么地方啊,我要过去处
2012年伦敦奥运会(第30届夏季奥运会)将于20
我下的鬼泣4一运行,就出现 fatal error:mpD3
用合适的介词填空 What does your father loo
ion ampliseq designer 引物设计怎么用
解放区杨氏沙园膏药(焦作店)地址有谁知道?有
阎家烧锅地址在什么地方,想过去办事
家用球阀 四十元左右 能用住吗
男生15岁了 放了一个暑假基本上没有长高 现在
推荐资讯
怎么解除自动关机.vbe
位列三台什么意思
安琪酵母含铝吗
AB两地相距200千米,甲乙两车同时从A地驶向B地
男人吃芹菜好吗 为什么说男人不宜多吃芹菜
施华洛斯奇水晶
宝来汽车早上启动水温表变红色过几分钟就没显
鸿鑫商店怎么去啊,有知道地址的么
灌云泰美农业机械有限公司怎么去啊,有知道地
在数列{an}中,a1=1,a(n+1)=2an+(2的n次方
高州市潘州街道永进社区居民委员会怎么去啊,
思味甜品在哪里啊,我有事要去这个地方
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?