2013-02-24 5 views
0

У меня есть тип данных структуры. Он содержит элемент данных, который также является структурой.Количество экземпляров массива в структуре

struct List{ 
    private: 
     struct Line listLine[MAX_LINES]; 
    public: 
     void set(int no); 
     void display() const; 
}; 

listLine имеет тип линии, определяется как:

struct Line { 
    private: 
     int num; 
     char itemString[MAX_CHARS + 1]; 
    public: 
     bool set(int n, const char* str); 
     void display() const; 
}; 

main.cpp

int main() { 

    int no; 
    List list; 

    cout << "List Processor\n==============" << endl; 
    cout << "Enter number of items : "; 
    cin >> no; 

    list.set(no); 
    list.display(); 
} 

линия :: дисплей

void Line::display() const { 

    cout << this->num << ' ' << this->itemString << endl; 

} 

list.display (звонки линии .display и line.display TS один экземпляр строки, если я называю его 3 раза, он будет выводить 3-х различных типов данных, каждая из которых соответствует индексу listLine)

void List::display() const { 

    for (int i = 0; i < 10; i++) { 
     this->listLine[i].display(); 
    } 

} 

Давайте предположим, что я заселить listLine, как так:

listLine[0].num = 1 
listLine[0].itemString = ABC 
listLine[1].num = 2 
listLine[1].itemString = ZXC 
listLine[2].num = 3 
listLine[2].itemString = QWE 

Я знаю, что это не правильный синтаксис C++, я просто пытаюсь проиллюстрировать концепцию, показать, какие данные находятся внутри listLine.

До сих пор я был в состоянии напечатать содержимое listLine, как так:

for (int i = 0; i < 10; i++) { 
    this->listLine[i].display(); 
} 

Вывод выше

// reading values in 
List Processor 
============== 
Enter number of items : 3 
Enter line number : 1 
Enter line string : ABC 
Accepted 
Enter line number : 2 
Enter line string : ZXC 
Accepted 
Enter line number : 3 
Enter line string : QWE 
Accepted 

// printing those values with the loop i posted 
1 ABC 
2 ZXC 
3 QWE 
1 
134514883 
-1217566436 Jm·Z·Èí¬¿- 
134515757 
134514257 
134515633 0 
-1218833660 ôZ·F· 

Обратите внимание, как только действительные данные 1 ABC, 2 ZXC и 3 QWE и после этого он просто печатает тарабарщину?

Я хочу отображать только действительные данные, но функция display() List не имеет параметров, поэтому как я должен знать, какие данные в listLine действительны?

Я только хочу напечатать допустимые строки, в приведенном выше примере, то есть три, а остальные 7 строк являются бессмысленными.

+0

Да, я сожалею об этом, он выглядит довольно загадочным при втором взгляде. – eveo

+0

Почему вы не храните число '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' (Я предполагаю, что 'std :: list' является вне границ для этого назначения). – Johnsyweb

+0

Я не могу редактировать структуры. Элементы данных и функции-члены указаны в задании. – eveo

ответ

0

Хм, вопрос немного изменился.

, но мой ответ на первоначальный вопрос, ниже, намек достаточно я думаю, что (для домашних заданий вопроса осуществления /)


, очевидно, назначение требует использования nullterminated строк

, которые считают, когда вы закончили с этими заданиями, используйте std::string (или std::wstring) для хранения строк

+0

Будет, это просто введение в ООП C++. Моя основная проблема заключается в том, что я не могу получить доступ к элементам данных 'line' из массива типов' line' в структуре 'List'. – eveo

+0

можете ли вы поместить в список другого члена, в котором вы можете сохранить число, прошедшее в List :: set (no)? Пример: когда вы вызываете List :: set (no), то в своем теле вы не храните нет в переменной внутри List. Так что, когда вы вызываете List :: display(), вы можете использовать эту переменную как свою верхнюю, когда ее зацикливаете – TravellingGeek

+0

Желаю! Структуры определяются моим профессором. – eveo

Смежные вопросы