编程-修改了下代码就运行出错了,怎么回事?

问题描述

修改了下代码就运行出错了,怎么回事?
 #include<iostream>
using namespace std;
struct list
{
    int data;   struct list *next;
};
class Stack
{
    struct list *ptr;
public:
    Stack()
    {
        ptr=NULL;
    }
    void push(int x)//进栈成员函数
    {
        struct list *newnode=new struct list;
        newnode->data=x;
        newnode->next=ptr;
        ptr=newnode;
    }
    int pop()//出栈成员函数
    {
        //struct list *top;
        int value;
        value=ptr->data;
        //top=ptr;
        ptr=ptr->next;
        //delete top;
        return value;
    }
    int empty()
    {
        if(ptr==NULL)
            return 1;
        else
            return 0;
    }
};
class Queue
{
    struct list *ptrf,*ptrb;
public:
    Queue()
    {
        ptrf=ptrb=NULL;
    }
    void enqueue(int x)//进队成员函数
    {
        struct list *newnode=new struct list;
        newnode->data=x;
        newnode->next=NULL;
        if(ptrb==NULL)
            ptrf=ptrb=newnode;
        else
        {
            ptrb->next=newnode;
            ptrb=newnode;
        }
    }
    int dequeue()//出队成员函数
    {
        //struct list *tmp;
        int value;
        value=ptrf->data;
        //tmp=ptrf;
        ptrf=ptrf->next;
        //delete tmp;
        return value;
    }
};
void main()
{
    Stack S;//定义一个栈对象
    Queue Q;//定义一个队列对象
    char ch; int e,p,d;
    cout<<"输入数据:";
    while((ch=getchar())!='.')
    {
        S.push(ch);
        Q.enqueue(ch);
    }
    //while(!S.empty()&&S.pop()==Q.dequeue());退栈和出队,比较是否相同
    e=S.empty();
    while(e==0)
    {
        p=S.pop();
        d=Q.dequeue();
        if(p!=d)
            break;
    }
    if(e==1)
        cout<<"输入的是回文数据."<<endl;
    else
        cout<<"输入的不是回文数据."<<endl;
    system("pause");
}

解决方案

 e=S.empty();
    while(e==0) //e始终不变,不就是死循环了吗
    {
        p=S.pop();
        d=Q.dequeue();
        if(p!=d)
            break;
                e=S.empty(); //增加
    }

解决方案二:

你注释掉的代码是正确的,因为while条件的!S.empty是每次循环都判断堆栈是否为空了的,而你修改的代码只是第一次循环之前判断了S.empty,while循环体并没有重置判断条件,导致循环的跳出只能在碰到第一个p!=d的时候。
如果没有p!=d的数据,那么循环到S堆栈的边界还要继续的话,就会出现你报错的异常了。

时间: 2024-11-17 17:54:14

编程-修改了下代码就运行出错了,怎么回事?的相关文章

编程-我这代码怎么运行出这样的结果?

问题描述 我这代码怎么运行出这样的结果? 计算机代码编程培训"> 解决方案 问题应该出在printstudent函数的传递参数i上,我在visual c++上测试了一下,如果是将结构体数据直接赋值的话,输出没有问题: struct Student { char name[20]; int age; struct Score score; }stu[2]= {"hkx",20,{95,92,90},"zl",19,{99,98,97}}; 但是如果是在

c++-帮忙看下代码,运行不了了,哪里有问题麻烦指出来下谢谢~!麻烦修改下 谢谢!

问题描述 帮忙看下代码,运行不了了,哪里有问题麻烦指出来下谢谢~!麻烦修改下 谢谢! #include #include using namespace std; int min(int n, int m); int max(int n, int m); const int N = 50; void Read_Store(int Number[N], int &length); void Add_Output(); int main() { cout<<" This is a

递归法将一个数字倒置(如:12345→54321)代码不知道哪里出错了

问题描述 递归法将一个数字倒置(如:12345→54321)代码不知道哪里出错了 public class Recursion { public static int len(int n){ int j=0; while(n>0) { j++; n=n/10; } return j; } public static int f(int n,int k){ int i,t=n%10; if(n<10) { k=n; return k; } else{ for(i=0;i<len(n);i+

java 运算-小白求助,我想实现如下功能,可是代码不知道哪出错了

问题描述 小白求助,我想实现如下功能,可是代码不知道哪出错了 public boolean panduanNullCondition(XSSFRow from, Properties source) { boolean N = true; boolean Y = true; ArrayList<Boolean> al = new ArrayList<Boolean>(); ArrayList<Boolean> Al = new ArrayList<Boolean&

c语言-请高手看一段C程序代码不知道哪里出错了

问题描述 请高手看一段C程序代码不知道哪里出错了 解决方案 另外printf你又拼错了. 解决方案二: 第14行 应为printf 解决方案三: 你的那个所谓的山寨编译器,也不知道有没有windows.h,估计没有. 建议你使用VC++ 解决方案四: 这本书其实我也看过,作者自己做了一个所谓的开发环境,其实用的是GNU C++,它并不包含windows的api函数的头和库. 解决方案五: 出错信息呢,贴出来呗 解决方案六: 你第14行的 printf 写错了 解决方案七: 第14行的printf

帮我看下这个存储过程,怎么出错了?

问题描述 --这个使用来搜索并带有分页的存储过程,说什么语法错误/**分界法分页SP.*/--docount表示是否读取数据总条数CreatePROCdbo.select_News@PageSizeINT=2,@PageIndexINT=1,@DoCountBIT=0,@newsKeyvarchar(20),@newsGjzvarchar(100)ASSETNOCOUNTONDECLARE@SqlNVARCHAR(500)IF@DoCount=1SELECTCOUNT(newsId)ASCTFR

各位老师 请看一下这代码哪一点出错了。 我是菜鸟 呵呵

问题描述 usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{publicForm1(){

编程-能帮我修改下代码吗?那fopen_s函数的参数

问题描述 能帮我修改下代码吗?那fopen_s函数的参数 解决方案 fopen_s(&fp,"c:\zi.txt","w");

c-请教一下这段代码哪里出错了?

问题描述 请教一下这段代码哪里出错了? #include <stdio.h> #include <stdlib.h> typedef int Elemtype; typedef struct node{ Elemtype elem; struct node *next; }*top; int m=sizeof(struct node); struct node *Push(struct node *top,Elemtype x){ struct node *p; p=(struct