所以我一直在研究一个小程序,询问用户学习给定主题的名称/小时数,然后进行一些计算并显示结果。现在,为了获得4个主题的输入,我这样做:
#include <iostream>
using namespace std;
int main()
{
string topic1 = "";
string topic2 = "";
string topic3 = "";
string topic4 = "";
/* could have more topics here */
double hoursStudying1 = 0;
double hoursStudying2 = 0;
double hoursStudying3 = 0;
double hoursStudying4 = 0;
cout << "Topic name: ";
getline(cin, topic1);
cout << "Time studying for " << topic1 << ": ";
cin >> hoursStudying1;
cin.ignore();
cout << "Topic name: ";
getline(cin, topic2);
cout << "Time studying for " << topic2 << ": ";
cin >> hoursStudying2;
cin.ignore();
cout << "Topic name: ";
getline(cin, topic3);
cout << "Time studying for " << topic3 << ": ";
cin >> hoursStudying3;
cin.ignore();
/* calculate stuff here */
/* display the results */
cout << "For " << topic1 << " you spent " << hoursStudying1 << " hours studying" << endl;
/* etc */
return 0;
}
我是初学者,但我知道必须有更有效的方法来实现这一目标:(。我如何使用,例如,do...while
循环甚至是for
循环显示我所研究的每个主题/小时(按顺序)的一组提示,我现在正在做什么?我不正在寻找任何人重写我的程序或类似的东西那,但请给我一些关于他们代码的指示。非常感谢你们!
编辑:非常感谢您提供给我的所有示例和指示。我会和他们一起玩,并发布一些我自己的代码,让你知道它是如何工作的。
答案 0 :(得分:2)
您需要使用数组或列表,然后循环遍历它们。您可以有两个单独的数组,一个用于保存主题名称,另一个用于保存小时研究,或者您可以定义一个包含主题名称和研究小时数的类,然后使用该类的元素数组。
最重要的是,您需要学习如何使用数组或集合。
答案 1 :(得分:2)
您可以使用struct
typedef struct _element {
string topic;
double hoursStudying;
} element;
然后你可以定义array这样的元素
element journal[ 4 ];
现在您可以考虑使用循环来处理数组journal
。
亲自尝试:用以上提示编写完整的程序并告诉我们......
在这样做之后,尝试将结构转换为一个类,确定需要哪些成员函数然后实现它们。再次,让我们知道......
答案 2 :(得分:1)
我会做类似的事情:
cout << "Enter topic name or 'quit'";
while(true)
{
cin<< foo;
if(foo == 'quit')
break;
else
{
//Do stuff with foo
}
}
显然你会想要处理奇怪的输入(“qUiT”),但这就是循环结构。
答案 3 :(得分:1)
我如何使用例如do ... while循环甚至for循环来显示每个主题/小时的提示数量(按顺序),正如我现在所做的那样?
您应该创建一个用于存储数据的数组,而不是为其创建单独的变量。之后,使用循环来提示和接收输入。它可以是while循环或for循环。 (通常,当您确定要迭代的次数时,请使用for-loop
。当无法确定迭代次数时使用while-loop
)
示例:强>
double hoursStudying[5] = {0};
for(int x=0; x<5; x++){ //5 can be replaced with a variable indicating array size
cout << "Time studying for " << topic << " " << x << ": ";
cin >> hoursStudying[x];
cin.ignore();
}
为了显示输出,它将是相同的。只需使用循环迭代数组值。
示例:强>
for(int x=0; x<5; x++){
cout << "For " << topic << " " << (x+1) << " you spent "
<< hoursStudying[x]<< " hours studying" << endl;
}
答案 4 :(得分:-1)
这是用C ++编写程序的正确方法:
文件Topic.h:
#pragma once
#include <sstream>
#include <string>
using namespace std;
class Topic {
string name;
double hours;
public:
Topic(string name, double hour);
~Topic();
void setName(const string & _name) {
name = _name;
}
void setHours(double & _hours) {
hours = _hours;
}
void addHours(double & _hours) {
hours += _hours;
}
string getName() const {
return name;
}
double getHours() const {
return hours;
}
string print() const;
};
文件Topic.cpp
#include "Topic.h"
Topic::Topic(string name = "", double hour = 0.0) :
name(name), hours(hour) {
}
Topic::~Topic() {
}
string Topic::print() const {
ostringstream output;
output << "For " << name << " you spent " << hours << " hours studying.";
return output.str();
}
File Topics.h:
#pragma once
#include <vector>
#include <sstream>
#include <string>
#include "Topic.h"
using namespace std;
class Topics {
vector<Topic> topics;
public:
Topics();
~Topics();
void add(const Topic & topic) {
topics.push_back(topic);
}
Topic get(const unsigned int & index) const {
return topics[index];
}
string printAll() const;
};
File Topics.cpp:
#include "Topics.h"
Topics::Topics()
{
}
Topics::~Topics()
{
}
string Topics::printAll() const {
ostringstream output;
for (Topic topic : topics) {
output << topic.print() << endl;
}
return output.str();
}
File Source.cpp
#include <iostream>
#include <vector>
#include <sstream>
#include <string>
#include "Topic.h"
#include "Topics.h"
using namespace std;
Topic input() {
string name;
double hours;
cout << "Topic name: ";
cin >> name;
cout << "Time studying for " << name << ": ";
cin >> hours;
cout << endl;
return Topic(name, hours);
}
Topics inputCycle()
{
Topics topics;
int n;
cout << "How many topics you have ?" << endl;
cin >> n;
for (int i = 0; i < n; i++)
topics.add(input());
return topics;
}
void printAll(const Topics & topics) {
cout << topics.printAll() << endl;
}
int main()
{
printAll(inputCycle());
system("PAUSE");
return false;
}