Структура переключателя в C ++ не работает - PullRequest
0 голосов
/ 10 июля 2010
#include<iostream>
#include<stdio.h>

using namespace std;

void student_array();
void query();
void show_arr();
void student_entry();


struct student
{
    char name[80];
    char f_name[80];
    char the_class[3];
    char grade[2];
};

student std_arr[10];
char action;
int count;
int main()
{
    cout<<"add 1st student"<<endl;
    student_entry();
}
void student_entry()
{
    if (count == 10)
    {
        cout<<"Memory Full!";
        //break;
    }
    cout<<"enter name of student"<<endl;
    cin>>std_arr[count].name;
    //cout<<std_arr[count].name;
    cout<<"enter student's father's name"<<endl;
    cin>>std_arr[count].f_name;
    cout<<"enter the class of student"<<endl;
    cin>>std_arr[count].the_class;
    cout<<"enter the grade of student"<<endl;
    cin>>std_arr[count].grade;
    query();
    count++;

}

void query()
{
    cout<<"what do you want to do?"<<endl;
    cout<<"press a to add"<<endl;
    cout<<"press s to show"<<endl;
    cout<<"press q to quit"<<endl;
    cin>>action;
    //cout<<action;
    switch (action)
    {
        case 'a':
        {
            student_entry();
            break;
        }
        case 's':
        {
            show_arr();
            break;
        }
        default:
        {
            cout<<"wrong entry";
            query();
            break;
        }
    }
}

void show_arr()
{
    for (int i = 0; i < count; i++)
    {
        cout<<endl<<"Student No."<<count<<endl;
        cout<<"Name: "<<std_arr[i].name<<endl;
        cout<<"Father's Name: "<<std_arr[i].f_name<<endl;
        cout<<"Class: "<<std_arr[i].the_class<<endl;
        cout<<"Grade Achieved: "<<std_arr[i].grade<<endl;
    }
}

Моя структура переключателей не вызывает функцию show_arr () в случае s.

Ответы [ 2 ]

1 голос
/ 10 июля 2010

count всегда равно нулю.

При первом вызове student_entry из main вы звоните query перед увеличением значения count.Теперь, если вы введете a, данные следующего учащегося будут введены в str_arr[0], и будет вызван query без обновления count.

Следовательно, всякий раз, когда вы вводите 's' и вызывается функция show_arr, значение count будет равно нулю.

Не вызывать запрос из метода student_entry, просто увеличить счетчики вернись из него.Выполните запрос в цикле while(true) в основной функции и вызовите student_entry или show_data или просто break на основе введенных данных.

1 голос
/ 10 июля 2010

Вам необходимо увеличить переменную count перед вызовом query, иначе цикл for не будет выполнен. Поскольку один студент уже добавлен в массив, имеет смысл увеличить эту переменную перед выполнением запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...