C ++ строка не получает сброс - PullRequest
0 голосов
/ 27 марта 2020

если я введу первую команду как create, она должна вывести incomplete command..., а затем, когда я снова введу create file в качестве команды, она должна вывести Hello. Но это только печать incomplete command..., но не печать вывода Hello во второй раз. Пожалуйста помоги. Я думаю, что глобальная строковая команда не получает сброс каждый раз, хотя я установил ее пустой каждый раз, когда вызывается функция accept_command. Я могу ошибаться.

введите код здесь

#include<iostream>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
using namespace std;

struct node
{
    string details;
    int shirtnumber;
    struct node* next;
};
struct node* head=NULL;
struct node1
{
    string details;
    int shirtnumber;
    struct node1* row;
    struct node1* column;
};
struct node1* head1=NULL;
string command="";
string command_words[5]="";


void validate_command()
{
    void command_words_calculate();
    void accept_command();

    command_words_calculate();

    if(command_words[1]=="")
    {
       cout<<"incomplete command...\n"<<endl;
       accept_command();
    }
    if(command_words[0].compare("create")==0)
    {
        cout<<"Hello\n"<<endl;
        accept_command();
    }
}

void command_words_calculate()
{
    int i,k=0;
    char ch,ch1;
    string duplicate="";
   for(i=0;i<command.length();i++)
    {
        ch=command.at(i);
        if(ch==' ')
            continue;
        else
            break;
    }

     command=command.substr(i,command.length());

    for(i=0;i<command.length();i++)
    {
        ch=command.at(i);
        if(i!=command.length()-1)
            ch1=command.at(i+1);
        if(ch==' ')
        {
            if(i!=command.length()-1&&ch1!=' ')
            {
            k++;
            continue;
            }
            else if(i==command.length()-1)
            {
                break;
            }
            else
                continue;
        }
        else
            command_words[k]=command_words[k]+ch;
    }

}

void display()
{
    void accept_command();
    cout<<"O.S"<<endl;
    accept_command();
}

void accept_command()
{
   command="";
   void validate_command();
   cout<<"root\\:>";
   getline(cin,command);
   validate_command();

}

int main()
{
    void display();
    display();
    return 0;



}

1 Ответ

0 голосов
/ 27 марта 2020

Ну, как вы говорите, глобальная строка не сбрасывается каждый раз. Но почему это так, глобальные переменные не работают таким образом. Вы можете точно сбросить глобальную переменную, но правильный способ сделать это - использовать вместо нее локальные переменные. Как правило, вам следует избегать глобальных переменных.

Как насчет этого, я удалил глобальные переменные command и command_words и заменил их локальными.

void accept_command()
{
   string command="";                     // local variable
   void validate_command(string command);
   cout<<"root\\:>";
   getline(cin,command);
   validate_command(command);
}

void validate_command(string command)
{
    void command_words_calculate(string command, string* command_words);
    void accept_command();

    string command_words[5]={""};                     // local variable
    command_words_calculate(command, command_words);

    if(command_words[1]=="")
    {
       cout<<"incomplete command...\n"<<endl;
       accept_command();
    }
    if(command_words[0].compare("create")==0)
    {
        cout<<"Hello\n"<<endl;
        accept_command();
    }
}

void command_words_calculate(string command, string* command_words)
{
    int i,k=0;
    char ch,ch1;
    string duplicate="";
   for(i=0;i<command.length();i++)
    {
        ch=command.at(i);
        if(ch==' ')
            continue;
        else
            break;
    }

     command=command.substr(i,command.length());

    for(i=0;i<command.length();i++)
    {
        ch=command.at(i);
        if(i!=command.length()-1)
            ch1=command.at(i+1);
        if(ch==' ')
        {
            if(i!=command.length()-1&&ch1!=' ')
            {
            k++;
            continue;
            }
            else if(i==command.length()-1)
            {
                break;
            }
            else
                continue;
        }
        else
            command_words[k]=command_words[k]+ch;
    }

}

Вот как вы должны работать с локальными переменными, которые используют параметры и возвращаемые значения для передачи данных друг другу.

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