我的问题是当我运行代码并调用列表时,所以我按3,没有任何反应,只是跳过for()中的代码。为什么会发生这种情况,我该如何解决? 简单的代码将是受欢迎的。我现在就是这个。
在主要检查之前的前两个int是否学生是否符合学校的资格,或者没有。我测试了那些并且他们工作得很好。
结构描述了一个学生。他/她有一个名字(nev),标记(bacmagy,bacrom,bacmat,bacvalasz)。一个布尔值(langexam)存在,表示学生是否有语言考试
bsiker是真的,如果calculateBac中的公式结果为真。 atmente是真的,如果bsiker和langexam都是真的。
上市会吐出名字,bsiker和atmente。
#include <iostream>
using namespace std;
int atmegye(bool elso, bool masodik){
if (elso && masodik)
return true;
else
return false;
}
int calculateBac(double magy, double mat, double rom, double val){
double osszeg = magy + mat + rom + val;
osszeg = osszeg / 4;
if (magy < 5 || mat < 5 || rom < 5 || val < 5 || osszeg < 6)
return false;
else
return true;
}
int main(){
struct diak{
char nev[32];
bool langexam, atmente, bsiker;
double bacmagy, bacrom, bacmat, bacvalasz, bac;
};
diak v[150];
bool cap = false;
int opcio;
int j, n = 0;
int i = 0;
do{
cout << "\n Welcome. \n 1-new studient \n 2-Change a studient's details \n 3-List \n 4-Exit \n";
cin >> opcio;
switch (opcio){
case 4:{
return 0;
}
case 1:{
cout << "Please give the name of the student: ";
cin >> v[i].nev;
cout << "Hungarian mark: ";
cin >> v[i].bacmagy;
cout << "Romanian mark: ";
cin >> v[i].bacrom;
cout << "Maths mark: ";
cin >> v[i].bacmat;
cout << "Optional mark: ";
cin >> v[i].bacvalasz;
cout << " Do you have a language exam? Please respond with 1 or 0: ";
cin >> v[i].langexam;
v[i].bsiker = calculateBac(v[i].bacmagy, v[i].bacrom, v[i].bacmat, v[i].bacvalasz);
v[i].atmente = atmegye(v[i].bsiker, v[i].langexam);
i = i + 1;
i = n;
cout << n;
break;
}
case 3: {
for(i = 0; i < n; i++)
cout << v[i].nev << " " << v[i].bsiker << " " << endl;
break;
}
}
}while (opcio != 5);
}
答案 0 :(得分:1)
这一行错了:
$string = '19187044491';
$searchString = '\%'.$string.'\%';
dd($searchString); // this is outputing '\187044491\%'
它应该是:
i = n;
您的代码只是撤消其前面的 n = i;
行。
答案 1 :(得分:1)
n初始化为0,永远不会设置为任何其他值。因此,你的for循环不应该运行任何迭代
答案 2 :(得分:1)
问题在于for循环的条件。您将n的值初始化为0,并且该值似乎永远不会改变。变量i也在for循环内初始化为0。当用户选择选项3时,评估for循环条件(0 <0)是假的,因此每次都跳过for循环。因此,要解决此问题,您需要在代码中的某处更新n的值,或者需要更改条件语句。希望这有帮助!
答案 3 :(得分:0)
我知道这可能对你的作业没有任何帮助,但是这里的 a (其中之一)处理这种方式的方式更像c ++,而且没有使用OOP。
标准库和c ++类型系统为我们提供了大量有用的工具,以便首先避免编写错误(这真的很棒!),并找到剩下的那个在编译时(节省了大量的时间!)。这就是c和c ++之间最大的区别,它是一个非常重要的区别。
#include <iostream>
#include <vector>
#include <string>
#include <string.h>
// fixed-size record to save in data file, for example.
struct diak{
char nev[32];
bool langexam, atmente, bsiker;
double bacmagy, bacrom, bacmat, bacvalasz, bac;
};
void atmegye(diak& student)
{
student.atmente = student.bsiker && student.langexam;
}
void calculateBac(diak& student) // computes grades average, checks if passed.
{
double osszeg = student.bacmagy + student.bacmat + student.bacrom + student.bacvalasz;
student.bac = osszeg / 4.0;
student.bsiker = student.bacmagy >= 5
&& student.bacrom >= 5
&& student.bacmat >= 5
&& student.bacvalasz >= 5
&& student.bac >= 5; // this last test unnecessary, but rules are rules.
}
void AddNewStudent(std::ostream& os, std::istream& is, std::vector<diak>& students)
{
diak new_student;
std::string temp;
while(temp.empty())
{
os << "Student name: ";
is >> temp; // using a temp buffer avoids out of bounds errors
}
if (temp.length() >= sizeof(new_student.nev))
temp.resize(sizeof(new_student.nev) - 1);
strcpy(new_student.nev, temp.c_str());
// input values below SHOULD be validated for range (0-100)
// or whatever makes sense for your school.
os << "Hungarian mark: "; is >> new_student.bacmagy;
os << "Romanian mark: "; is >> new_student.bacrom;
os << "Maths mark: "; is >> new_student.bacmat;
os << "Optional mark: "; is >> new_student.bacvalasz;
// example validation. Validating user input is the worst!
// above ^^^ grades ^^^ can use a common function for validation.
for(;;)
{
os << " Do you have a language exam? Please respond with 1 or 0:";
is >> temp;
if (temp == "0")
{
new_student.langexam = false;
break;
}
if (temp == "1")
{
new_student.langexam = true;
break;
}
// not a valid entry, try again!
}
calculateBac(new_student);
atmegye(new_student);
students.push_back(new_student);
}
void EditSudent(std::ostream& os, std::istream& is, std::vector<diak>& students)
{
// query which student then edit using streams 'os' and 'is' for i/o.
}
// could also be used to write to file...
void PrintStudents(std::ostream& os, const std::vector<diak>& students)
{
// maybe by printing a student number you could reuse this
// function from EditStudent()...
//
// At the same time, it is only 2 lines of code. You decide.
for(size_t i = 0; i < students.size(); i++)
os << students[i].nev << " " << students[i].bsiker << "\n";
os.flush();
}
int main()
{
std::vector<diak> students; // could also be an std::list<>
while(true) // 1 less line of code than do {...} while, and easier to read.
{
int opcio = 0;
std::cout << "\n Welcome."
"\n 1-new studient"
"\n 2-Change a studient's details"
"\n 3-List "
"\n 4-Exit \n";
std::cin >> opcio;
switch (opcio)
{
case '1':
AddNewStudent(std::cout, std::cin, students);
break;
case 2:
EditSudent(std::cout, std::cin, students); // << queries student and edit that
break;
case 3:
PrintStudents(std::cout, students);
break;
case 4:
return 0;
}
}
}
注意任务如何很好地划分到他们自己的函数中,这也有助于更快地发现错误,因为它使代码更容易阅读和推理(着名的分而治之的策略)。
将学生数组(或列表)作为单个实体简化了管理,没有额外的变量来保持最新等等......
在更严肃的应用程序中,输入验证最好使用模板完成,并为用户提供转义字符,以便他可以随时取消添加新学生。