Co tu jest nie tak? Niby działa, jednak gdy długość komendy jest większa niż COMMAND_MAX_LENGTH pojawia się dziwny błąd:
gdy komenda ma długość np. 33 wypisywane jest dwa razy "too_long" i dodatkowo kocówka stringu komenda. Co muszę zrobić aby informowało użytkownika, że wpisał za długą komendę i nie podejmowało żadnych dodatkowych działań? Czy da się zrobić tak by funkcja GetLine() przerywała pracę w momencie przekroczenia długości a nie tylko po wciśnięciu entera?
#include <iostream>
#include <stdlib.h>
#include "Interpreter.h"
#define COMMAND_MAX_LENGTH 16
#define ENTER '\n'
#define TRUE 1
#define FALSE 0
#define FAULT -1
int GetLine(char string[COMMAND_MAX_LENGTH])
{
int i = 0;
int too_long = 0;
char ch = '\0';
for(i=0; ch != ENTER ;)
{
ch = getchar();
string[i] = ch;
if(i == (COMMAND_MAX_LENGTH - 1))
{
too_long = 1;
break;
}
++i;
}
i--;
string[i] = NULL;
if(too_long)
return FAULT;
return i;
}
int main(int argc, char *argv[])
{
char *komenda;
int dlugosc_komendy = 0;
int error_code = 0;
Interpreter Interpreter_Komend; //obiekt klasy interpreter
do {
if((dlugosc_komendy = GetLine(komenda)) == FAULT)
{
printf("too long\n");
} else
{
if(strcmp(komenda,"koniec"))
error_code = Interpreter_Komend.Komendy(komenda, dlugosc_komendy);
}
} while (strcmp(komenda,"koniec"));
return 0;
}
-----------------------------------
//interpreter.h:
#ifndef _Interpreter_h_
#define _Interpreter_h_
class Interpreter {
public:
int Komendy(char *komenda, int dlugosc_komendy);
protected:
private:
};
#endif //_interpreter_h_
-----------------------------------
//interpreter.cpp:
#include <stdio.h>
#include "Interpreter.h"
int Interpreter::Komendy(char * komenda, int dlugosc){
switch (komenda[0])
{
case '?':
printf("Komenda pomocy\n");
break;
default:
printf("Tu interpreter. Aktualna komenda: %s\n", komenda);
}
return 0;
}