我试图通过使用2个向量来存储和更新堆栈中的指针,从而在链表中排列元音和辅音。然而,在下面的代码片段中,所有的cout都不能工作,我哪里错了?即使main中的cout也在安排函数调用之前,也没有显示出来。
using namespace std;
bool r(char a,char b)
{
return a>b;
}
struct node{
char a;
struct node* next;
};
struct node* head;
void push(char data)
{
node* temp=new node;
temp->a=data;
if(head==NULL)
{
head=temp;
temp->next=NULL;
}
else
{
temp->next=head;
head=temp;
}
}
void arrange()
{
vector<node*> q1;
vector<node*> q2;
node* temp=head;
while(temp!=NULL)
{
if(temp->a=='a'||temp->a=='e')
q1.push_back(temp);
else
q2.push_back(temp);
temp=temp->next;
}
head=q1[0];
cout<<head->next->a<<q1.size();
for(int i=0;i<=q1.size();i++)
{
if(i==q1.size())
q1[i]->next=q2[0];
else
q1[i]->next=q1[i+1];
}
for(int i=0;i<=q2.size();i++)
{
if(i==q2.size())
q2[i]->next=NULL;
else
q2[i]->next=q2[i+1];
}
node* t=head;
while(t!=NULL)
{
cout<<t->a;
t=t->next;
}
}
int main()
{
head=NULL;
push('a');
push('b');
push('c');
push('d');
push('e');
push('f');
node* temp=head;
while(temp!=NULL)
{
cout<<temp->a;
temp=temp->next;
}
arrange();
return 0;
} 只有当我删除arrange函数中的for循环时,cout才能正常工作
发布于 2020-09-13 16:05:58
测试if (cout),看看您的cout是否有问题。如果有问题,请报告给cerr。
发布于 2020-09-13 21:49:03
首先,在arrange()之前,这段代码在我的笔记本电脑上运行得很好,它停留了一秒钟,然后崩溃了。
我没有仔细阅读代码,但我猜测这是因为您试图访问nullptr。
至于arrange()之前输出的不可见性,可能是因为你没有使用std::cout << std::endl,它会刷新输出缓冲区,同时输出一个换行符。在std::cout之后,std::cout不会立即输出字符,而是将输入放入内置缓冲区中。当缓冲区被填满时,它输出所有内容,然后加载剩余的部分。
您可以参考this了解更多细节。(参见下面的Example段落)
正常情况下,当发生错误时,缓冲区也会刷新,这是当前的情况,也让我有点困惑。
https://stackoverflow.com/questions/63868436
复制相似问题