gpt4 book ai didi

c++ - 如何使用真正的字符串类型来表示类结构函数中的字符串?

转载 作者:行者123 更新时间:2023-11-28 03:44:55 25 4
gpt4 key购买 nike

我的任务是输入一些学生数据,比如

  • 选项 1:输入学生姓名和 ID。
  • 选项 2:输入 i.d(验证学生 ID - 输入选项 1),为学生输入最多 10 个成绩,然后计算学生的平均成绩和字母成绩
  • 选项 3:输出学生姓名、ID 和字母等级。

程序必须写成类似类的结构——在结构中声明变量和函数。

我还接到了使用类(class)结构输入 3 名学生详细信息的任务。为了简单起见,现在我只是为一个学生编写一个程序。

程序编译成功

遇到的第一个具体问题:当我选择“我”选项时,程序让我输入学生姓名,仅此而已! - 出于某种原因跳过 id 输入并继续。

问题是我一直在用cin>>还有scanf()作为我的主要输入法 - 但这些和 system("Pause")一直没有很好地为我服务-我明白system("pause")效率不是很高。过去有人建议我使用真正的字符串类型来表示像 std::string 这样的字符串。来自 <string> 的类(class)图书馆。

因此,我将不胜感激任何有关字符串类的帮助,以便我可以学习它们。

我相信我的程序可能还有其他一些问题,但是任何关于字符串类的建议和我的“第一个遇到的具体问题”都会对开始有所帮助。

所以我写了下面的程序来表示我的答案。

#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;


struct classroom{

char name;
int student_id;
float grades[10];
int num_tests;
float average;

float letter_grade;
void enter_name_id(void);
void enter_grade(int);
void average_grades(int);
void letter_grades(void);
void output_name_id_grade(void);

};


void classroom::enter_name_id(){

cout<<"\n Please enter name of student: \n"<<"\n";

cin>>name;
cout<<"\n Please enter student i.d number: \n"<<"\n";
scanf("%d",student_id);

cout<<"\n"<<student_id;

system("PAUSE");

}

void classroom::enter_grade(int n_tests){

if(n_tests<=10){

cout<<"\n Please enter student test grade: \n"<<"\n";
cin>>grades[n_tests];

}
else{

cout<<"\n You have reached your max number of grades entered!!"<<"\n";

}

system ("PAUSE");
}


void classroom::average_grades(int n_tests){


float sum=0;
int i;

for(i=0;i<n_tests;i++){

sum =sum+grades[i];

}
average=sum/(float)n_tests;
system ("PAUSE");
}




void classroom::letter_grades(void){

if(average>=90){

letter_grade=65;
}
if(average>=80&&average<90){

letter_grade=66;
}
if(average>=70&&average<80){

letter_grade=67;
}
if(average>=60&&average<70){

letter_grade=68;
}
if(average<60){

letter_grade=70;
}
system ("PAUSE");
}

void classroom::output_name_id_grade(void){

cout<<"\ Name I.D Grade "<<"\n";

cout<<name <<" ";
cout<<student_id<<" ";
cout<<(char)letter_grade<<"\n";
system ("PAUSE");
}


int main()
{
classroom a;
char option,answer,ans;
int a_num_tests, id;
a_num_tests=0;


for( ; ;){

cout<<"\nEnter 'I' for Name and I.d, 'G' for grades or 'O' for Data output "<<"\n";

cin>>answer;
switch(answer){

case'I':

a.enter_name_id();
break;
case'G':
cout<<"\n Please enter student i.d number: "<<"\n";
scanf("%d",id);
cout<<"\n"<<id;
if(id==a.student_id){

a_num_tests++;
a.enter_grade(a_num_tests);
cout<<"\n Would you like to enter another grade? 'Y' or 'N': "<<"\n";
cin>>ans;

while(ans=='y'||'Y'){
a_num_tests++;

a.enter_grade(a_num_tests);
cout<<"\n Would you like to enter another grade? 'Y' or 'N': "<<"\n";
cin>>ans;
}

a.average_grades(a_num_tests);
a.letter_grades();

}
else{

cout<<"\n You have entered the wong i.d number!!! \n"<<"\n";

break;
}


case 'O':

a.output_name_id_grade();
break;
default:
cout<<"\n Wong Entry "<<"\n";
break;
}
}
system ("PAUSE");
return 0;

}

最佳答案

再次向所有想知道的人问好,这段代码对我有用:

     void classroom::enter_name_id(void){

cout << " Please enter your name\n>";
std::cin.ignore( 25, '\n' );
cin.getline( name,25);

cout << " Type id\n>";
cin>>student_id;
return;
}

不确定这一行是如何工作的:'std::cin.ignore( 25, '\n' );'!!!但为了防止编译器跳过,它仍然是必需的下一行:'cin.getline(name,25);'

最初我在类函数中使用 'cin>>name' 时遇到问题,这就是为什么我问了有关替代真实字符串类型的问题。

如果有人要补充这个问题,请补充。

我想再次感谢所有为我们共同取得的进步做出贡献的粉丝。

启航...

关于c++ - 如何使用真正的字符串类型来表示类结构函数中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7954010/

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