为什么我在输入choose后无法继续操作了?
#include<iostream>
#include<string>
#define maxsize 50
using namespace std;
class BaseString
{
public:
char* GetData();
void Input();
unsigned int GetLength(){return Length;}
void Display();
BaseString();
~BaseString();
protected:
char Data[maxsize];
unsigned int Length;
};
BaseString::BaseString()
{
Data[maxsize-1]='\0';
Length=0;
cout<<"Basestring finished"<<endl;
}
BaseString::~BaseString()
{
Data[maxsize-1]='\0';
Length=0;
cout<<"~break basestring"<<endl;
}
char* BaseString::GetData()
{
return Data;
}
void BaseString::Input()
{
cout<<"请输入一个字符串:"<<endl;
cin.getline(Data,50);
for(Length=0;Data[Length]!='\0';Length++);
}
void BaseString::Display()
{
cout<<"该字符串为:"<<Data<<endl;
}
class ReString:virtual public BaseString
{
public:
void Inverse();
void Display();
void Input();
ReString();
};
ReString::ReString()
{
Data[maxsize-1]='\0';
cout<<"ReString finished"<<endl;
}
void ReString::Input()
{
cout<<"请输入一个字符串:"<<endl;
cin.getline(Data,50);
for(Length=0;Data[Length]!='\0';Length++);
}
void ReString::Display()
{
cout<<Data<<endl;
}
void ReString::Inverse()
{
for (int i=0;i<(Length-1)/2;i++)
{
char temp;
temp=Data[i];
Data[i]=Data[Length-i- 2];
Data[Length-i-2]=temp;
}
Data[Length-1] ='\0';
}
//class CopyString:virtual protected BaseString
//{
// public:
//
//};
//
//class CmpSrring:private BaseString
//{
//
//};
int main()
{
int i,choose;
for(i=1;i<=4;i++)
{
cout<<"*********************************************"<<endl;
cout<<"* 菜 单 *"<<endl;
cout<<"* 1:BaseString 2:ReString *"<<endl;
cout<<"* 3:CopyString 4:CmpString *"<<endl;
cout<<"*********************************************"<<endl;
cout<<"输入想要进行操作的序号:"<<endl;
cin>>choose;
if(choose==1)
{
BaseString basestring;
basestring.Input();
cout<<"字符串长度为:";
cout<<basestring.GetLength()<<endl;
basestring.Display();
}
if(choose==2)
{
ReString restring;
restring.Input();
restring.Inverse();
cout<<"字符串长度为:";
cout<<restring.GetLength()<<endl;
restring.Display();
}
if(choose==3)
{
}
if(choose==4)
{
}
}
}
1、cin在换行后才会执行;
2、cin在不会自动读取换行、空格等;
所以目前你的写法的正确用法应该如下:
输入想要进行操作的序号:
2hello
Basestring finished
ReString finished
请输入一个字符串:
字符串长度为:5
lleh
~break basestring
反转函数Data[Length-1] ='\0';这里的-1就不用了
首先目前就是少了一位,另外直接输入2\n会导致段溢出
你输入的是1还是2啊?
根据你提供的信息,问题可能出在如下两个方面:
解决方案如下:
在使用cin输入之前应该使用clear()函数重置一下cin标记位,接受新的输入,防止程序一直停留。
示例代码:
int choice;
cout << "Please input your choice:" << endl;
cin.clear(); // 清空cin标记位
cin >> choice;
当输入格式错误时应该清除输入流,并提示用户重新输入正确的格式。使用clear()函数清除输入流,ignore()函数忽略输入流,从而达到清空输入流的目的。
示例代码:
int choice;
cout << "Please input your choice:" << endl;
while(!(cin >> choice)) { // 输入格式错误
cin.clear(); // 清空cin标记位
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略输入流
cout << "Please input again:" << endl;
}
这里使用while循环,重复提示用户重新输入,直到输入格式正确。
另外,需要注意的是,使用cin输入字符串时,如果要保留空格,需要使用getline()函数,而不是cin。
示例代码:
string str;
cout << "Please input a string with space:" << endl;
getline(cin, str); // 保留空格
cout << "The input string is: " << str << endl;
以上是两种可能存在问题的情况及对应的解决方案。如果还有其他问题,可以提供更具体的信息,以便更好地解决问题。