循环结果有序

时间:2014-09-24 00:50:32

标签: c++

我需要你帮助解决这个问题。我想知道的是如何根据输入输出循环。

我们假设我们有一个程序可以根据用户的输入来衡量三角形是否正确。输入可能是这样的:

6 8 10
25 52 60
5 12 13

使用毕达哥拉斯公式,我们可以确定三角形是否正确

C^2=a^2+b^2

现在,提供的数字,输出应为:

right
wrong
right

我的问题是......如何进行计算并检查它是否正确,但是以与输入相同的顺序格式化输出?

这是我尝试过的:

#include <iostream>
#include <cmath>

using namespace std;

int rightt;
int wrong;

int main()
{
    double a = 0, b = 0, c = 0;
    double formula = 0;

    for (int i = 0; i < 1;)
    {
        cin >> a >> b >> c;
        formula = pow(a, 2) + pow(b, 2);

        if (formula == pow(c, 2) && formula != 0)
        {
            //cout << "Right";
            rightt = rightt + 1;
        }

        if (formula != pow(c, 2) && formula != 0)
        {
            //cout << "Wrong";
            wrong = wrong + 1;
        }

        if (a == 0 && b == 0 && c == 0)
        {
            i = 1;
            cout << "\n";

            while (rightt > 0)
            {
                cout << "\n" << "Right";
                rightt = rightt - 1;

            }

            while (wrong > 0)
            {
                cout << "\n" << "Wrong";
                wrong = wrong - 1;

            }
        }
    }
    system("pause");
}

但我的输出不是我想要的。输出首先设置为右侧,然后是错误的输出。谢谢,我希望你能理解我的问题。

编辑:

我需要在达到0 0 0之后输出,而不是之前。因此,如果我离开注释部分,输出将是Number-output-Number-output,我需要的是允许用户输入所有数字并告诉软件他在输入0 0 0时完成,然后给出基于订单的输出。

让我们想象一下这个输入:

6 8 10   >> this is right
25 52 60 >> This is wrong
5 12 13  >> This is right
0 0 0    >> This is the values used to end the inputs 


Output should be 
right
wrong
right

1 个答案:

答案 0 :(得分:1)

我认为,您可以在向量中存储所有答案 IN ORDER ,而不是计算正确答案和错误答案的数量。完成所有答案的存储后,您可以循环搜索答案,然后逐个打印出来。

如果你还没有学过矢量,那么概念很简单......你有一个像数据集合的数组。 “push_back”始终将数据固定到数据集合的末尾。所以,如果你的第一个答案是错的,那么正确,然后是正确的,首先你会推送(错误的)...导致[错误]的集合。然后你会推送(右)导致[错误,正确]的集合。再次,你会push_back(右)所以你的最终矢量将是[错误,正确,右]的顺序集合

现在您只需要遍历您的集合即可打印出数据。 “iter”是指向列表中每个位置的指针。要取消引用“每个点的内容”,请说出(* iter)将提供字符串结果值。

#include <iostream>
#include <cmath>
#include <vector>
#include <string>

using namespace std;



int main()
{
    double a = 0, b = 0, c = 0;
    double formula = 0;
    int numberOfResults = 0;
    int currentIndex = 0;
    vector<string> answers;

    for (int i = 0; i < 1;)
    {
        cout << "Enter the number of attempts: " << "\n";
        cin >> numberOfResults;
        string results[numberOfResults];
        cout << "Enter a b and c" << "\n";
        cin >> a >> b >> c;
        formula = pow(a, 2) + pow(b, 2);

        if (formula == pow(c, 2) && formula != 0)
        {
            results[currentIndex] = "Right";
            answers.push_back("Right");

        }

        if (formula != pow(c, 2) && formula != 0)
        {
            results[currentIndex] = "Wrong";
            answers.push_back("Wrong");    

        }

        if (a == 0 && b == 0 && c == 0 || currentIndex == numberOfResults-1)
        {
            for (int j = 0; j < numberOfResults; j++){
                cout << "\n" << results[j];
            }

            for(auto iter = answers.begin(); iter != answers.end(); ++iter){
                cout << "\n" << (*iter);
            }
            return 0;
        }
    }
    system("pause");
}