这是我试图制作的代码,它是一个简单的结构程序,可以根据具体细节进行存储和搜索,而不是每次都显示整个结构
#include <iostream>
#include <string>
#include <conio>
#include <stdlib>
using namespace std;
struct stu
{
int roll;
char name[80];
int cls;
int adm;
};
void inp(stu &s)
{
cout<<"\n Enter Details of Student: ";
cout<<"\n Enter Name: ";
gets(s.name);
cout<<"\n Enter Roll no.: ";
cin>>s.roll;
cout<<"\n Enter Class: ";
cin>>s.cls;
cout<<"\n Enter Admission: ";
cin>>s.adm;
}
void out(stu s)
{
cout<<"\n Details Are: ";
cout<<"\n Name: "<<'\t'<<s.name;
cout<<"\n Roll: "<<'\t'<<s.roll;
cout<<"\n Enter Class: "<<'\t'<<s.cls;
cout<<"\n Admission No.: "<<'\t'<<s.adm;
}
void main()
{
stu s[50];
int n,i;
cout<<"\n Enter no. of Students: ";
cin>>n;
for(i=0;i<n;i++)
{
inp(s[i]);
}
menu:
clrscr();
cout<<"\n Search by";
cout<<"\n 1.Roll"<<'\t'<<"\n 2.Name"<<'\t'<<"\n 3.Admission No."<<'\t'<<"\n 4.Exit"<<endl;
int opt,r,amd;
char naam[30];
cin>>opt;
if(opt==1)
{
cout<<"\n Enter Roll:";
cin>>r;
for(i=0;i<n;i++)
{
if(s[i].roll==r)
out(s[i]);
else
cout<<"\n Not Found";
}
}
if(opt==2)
{
cout<<"\n Enter Name:";
gets(naam);
for(i=0;i<n;i++)
{
if(strcmp(naam,s[i].name)==0)
out(s[i]);
else
cout<<"\n Not Found";
}
}
if(opt==3)
{
cout<<"\n Enter Admission No.: ";
cin>>amd;
for(i=0;i<n;i++)
{
if(amd==s[i].adm)
out(s[i]);
else
cout<<"\n Not Found";
}
}
if(opt==4)
exit(0);
goto menu;
getch();
}
所以,即使我尝试使用roll no或者某些东西进行搜索,也没有输出 在我尝试搜索窗口后返回菜单。那么我该如何解决这个问题呢?我应该添加一个标志变量吗?
答案 0 :(得分:1)
当您回到标签时,您会立即清除屏幕。因此,在显示结果后,您没有时间真正看到它们。您可以尝试在显示之后和转到之前进行一些输入。
编辑: 就像我上面所说的那样,如果你在goto语句之前接受一些用户输入,那么用户将能够在输入之前读取打印输出。例如
cout >> "Please enter any character to continue.\n";
getch();
然后将clrscr()函数放回原位。
此外,我会回应其他人在评论中所说的话。混合流,使用goto而不是内置循环并使用固定长度数组来存储用户输入都不太好。