2015-06-29 58 views
-5

所以我正在做另一项任务,我需要你的帮助。我制作了这个程序,该程序应该能够找到一种颜色并用该颜色坐标和颜色输出一个点。当我输入诸如“raudona”(红色)之类的东西时,它会输出所有内容,但我会得到随机数字。当我输入“geltona”(黄色)时,它只输出随机数。当我输出字符串时,我得到随机数字

下面的代码:(http://pastebin.com/YtN1vkFk - 与Uncrustify自动缩进)

#include <iostream> 
#include <fstream> 
#include <string> 
#include <iomanip> 

using namespace std; 

const int CMax = 100; 

struct taskai 
{ 
    int x; 
    int y; 
    string spalva; 
}; 
struct atrinkti 
{ 
    int x; 
    int y; 
    string spalva; 
}; 
// -------------------------------- 

void duomenys(taskai T[], int &n); 
void isvedimas(taskai T[], atrinkti A[], int n, string ispal, int maxr); 
void spalva(taskai T[], int n); 
void atrinkimas(taskai T[], atrinkti A[], int n, string ispal, int &maxr); 

// -------------------------------- 
int main() 
{ 
    setlocale(LC_ALL, "Lithuanian"); 
    string ispal; 
    int n, maxr = 0; 
    atrinkti A[CMax]; 
    taskai T[CMax]; 
    duomenys(T, n); 
    cout << "Iveskite spalva:" << endl; 
    cin >> ispal; 
    atrinkimas(T, A, n, ispal, maxr); 
    isvedimas(T, A, n, ispal, maxr); 

    return 0; 
} 

void duomenys(taskai T[], int &n) 
{ 
    ifstream duom("Duomenys.txt"); 

    duom >> n; 

    for (int i = 0; i < n; i++) 
    { 
     duom >> T[i].spalva; 
     duom >> T[i].x >> T[i].y; 
    } 
} 

void isvedimas(taskai T[], atrinkti A[], int n, string ispal, int maxr) 
{ 
    ofstream ras("Rezultatai.txt"); 

    ras << "Pradiniai duomenys: " << endl; 
    ras << endl; 
    ras << setfill('-') << setw(40) << "-" << endl; 
    ras << setfill(' '); 
    ras << "Spalva" << setw(30) << "Koordinatės" << endl; 
    ras << endl; 
    ras << setfill('-') << setw(40) << "-" << endl; 
    ras << setfill(' '); 
    for (int i = 0; i < n; i++) 
    { 
     ras << setw(5) << T[i].spalva << setw(20) << T[i].x << setw(4) << T[i].y << endl; 
    } 
    ras << setfill('-') << setw(40) << "-" << endl; 
    ras << setfill(' '); 
    ras << endl; 
    ras << setfill('_') << setw(40) << "_" << endl; 
    ras << setfill(' '); 
    ras << endl; 
    ras << "Taškai, turintys spalvą " << ispal << " yra: " << endl; 
    ras << endl; 
    ras << "Koordinatės" << setw(15) << "Spalva" << endl; 
    ras << setfill('_') << setw(40) << "_" << endl; 
    ras << setfill(' '); 
    for (int i = 0; i <= maxr; i++) 
    { 
     ras << setw(3) << A[i].x << setw(4) << A[i].y << setw(20) << A[i].spalva << endl; 
    } 
} 

void atrinkimas(taskai T[], atrinkti A[], int n, string ispal, int &maxr) 
{ 
    for (int i = 0; i < n; i++) 
    { 
     if (ispal == T[i].spalva) 
     { 
      A[i].x = T[i].x; 
      A[i].y = T[i].y; 
      A[i].spalva = T[i].spalva; 
      maxr++; 
     } 
    } 
} 

而这里的输入文件:(http://pastebin.com/3zvZgT8k

5 
raudona -5 1 
juoda  1 1 
raudona -4 3 
geltona  5 5 
geltona  6 6 

第一个号码是n,则有颜色和坐标。

+0

请在此处显示完整的简短代码示例。 – Simon

+1

最好在这里内嵌代码。如果pastebin永远无法使用,那么如果只是暂时的,您的问题就变得无法使用。此外,请首先阅读indendation,并让您的代码可读。 –

+0

我知道这有点乱,但我现在做不了多少.. – EJay

回答

2

你的问题是在atrinkimas()

您可以同时使用索引i作为两个作业;需要两个不同的计数器(以及第二已在代码,称为maxr):

void atrinkimas(taskai T[], atrinkti A[], int n, string ispal, int &maxr) 
{ 
    for (int i = 0; i < n; i++) 
    { 
     if (ispal == T[i].spalva) 
     { 
      A[maxr].x = T[i].x; 
      A[maxr].y = T[i].y; 
      A[maxr].spalva = T[i].spalva; 
      maxr++; 
     } 
    } 
} 

因为它是,你是在不一定是连续的位置复制材料到A阵列,留下大量的记录初始化。因此,例如,对于raudona,您设置了A[0]A[2],但随后尝试使用A[0]A[1]。用geltona,您设置了A[3]A[4],但尝试使用A[0]A[1]。所以,印刷使用了未初始化的值 - 这不是幸福的秘诀。

相关问题