这是我试图编写的代码,它是一个简单的结构程序,用于根据特定细节进行存储和搜索,而不是每次都显示整个结构
#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 或其他方式进行搜索,也不会出现任何输出 在我尝试搜索窗口后返回菜单。那么我该如何解决呢?我应该添加一个标志变量或类似的东西吗?
最佳答案
看起来当您循环回到您的标签时,您会立即清除屏幕。因此,在显示结果后,您没有时间实际查看它们。您可以尝试在显示之后和转到之前进行一些输入。
编辑: 所以就像我上面说的,如果你在 goto 语句之前接受一些用户输入,那么用户将能够在输入之前阅读打印输出。例如
cout >> "Please enter any character to continue.\n";
getch();
然后将 clrscr() 函数放回原来的位置。
此外,我会附和其他人在评论中所说的话。混合流、使用 goto 代替内置循环以及使用固定长度的数组来存储用户输入都不太好。
关于c++ - 输出消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37929080/