gpt4 book ai didi

C++ 代码崩溃并出现无限循环

转载 作者:行者123 更新时间:2023-12-01 22:37:30 32 4
gpt4 key购买 nike

我对这段代码有几个问题;

首先,如果我运行它,那么我选择PUSH并输入两个名字,例如“Emily Glassberg”,它会进入无限循环,但如果我只输入一个名字,例如“Michael”,效果很好。 Problem picture.

其次,当我运行代码后

  1. 选择“PUSH” - 输入一个名称 -
  2. 然后选择“删除”
  3. 然后选择“PUSH” - 并再次输入一个名称 - 程序崩溃
    如果我仅在输入任何名称之前选择“删除”,它甚至会崩溃
    Problem 2.1 picture
    Problem 2.2 picture
#include<iostream>
#include<conio.h>
#include<stdlib.h>
using namespace std;

struct Queue
{
struct node
{
node *next;
string name;
};

node *head;
int front=-1,rare=-1;

void push(string x)
{
if (rare < 0 )
{
head =new node;
head->next=NULL;
head->name=x;
rare ++;
}
else
{
node *temp,*temp1;
temp=head;

while(temp->next != NULL){temp=temp->next;}

temp1=new node;
temp->next=temp1;
temp1->next=NULL;
temp1->name=x;
}
}

void display()
{
node *temp;
temp=head;
if (rare < 0)
{
cout <<"Queue under flow";
return;
}
cout<<"\nthe queue is: \n\n";
while(temp != NULL)
{
cout <<temp->name<<endl;
temp=temp->next;
}
}
void pop()
{

if( rare < 0)
{
cout <<"Queue under flow\n";
return;
}
if(front == rare)
{
front = rare =-1;
head=NULL;
return;
}
front++;
head=head->next;
}

Queue Delete(Queue q){
node* temp = head;
while (head != nullptr){
head = head->next;
delete temp;
temp = head;
}
head = nullptr;
}

};


main()
{
Queue q1;
string x;
int ch;
while(true)
{
cout<<"1.PUSH\n2.POP\n3.DISPLAY\n4.DELETE\n5.EXIT\nenter Ur choice:\n";
cin >> ch;

switch(ch)
{
case 1:
cout <<"plz,enter the name \n";
cin >> x;
q1.push(x);
cout<<"\n";
break;

case 2:
q1.pop();
break;
case 3:
q1.display();
cout<<"\n";
break;
case 4:
q1.Delete(q1);
break;
case 5:
exit(0);
default :
cout<<"error selection.plz,try again\n";
}
}
return (0);
}

最佳答案

我认为你的问题是在“Michael”这个名字中没有空格,但在“Emily Glassberg”中却有空格。我相信 std::cin 很难处理这个问题,所以你应该使用 std::getline 并将 ch 更改为 std::string (你必须包含它)。代码需要看起来像这样才能正常工作:

ch.clear();
int chInt;
while(ch.size() == 0) {
std::getline(std::cin, ch);
}
chInt = std::stoi(ch);
//Handle the input here

您需要循环,因为无论出于何种原因, std::getline 往往只尝试从用户那里获取一次输入,然后继续,因此通过循环直到用户输入某些内容,我们可以确保始终会采用正确的输入。事先清除字符串也非常重要,这样我们就不会在以后的输入收集器中自动使用最后一个输入。最后,chInt = std::stoi(ch); 行转换我们刚刚从用户那里收集的字符串,将其转换为 int,然后将其分配给 chInt(因此在您的 switch 语句,您将使用 chInt 而不是 ch)。实现此修复可能会或可能不会帮助解决问题的后半部分。

关于C++ 代码崩溃并出现无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59362140/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com