Просто чтобы вы пошли по правильному пути, я очистил ваш код.
#include<stdio.h>
#include<string.h>
#define MAX 100
void TestIfPalin(char *palindrome)
{
// TODO
printf("TestIfPalin(%s)\n", palindrome);
}
// Given a user-input string of the form "Command(argument)"
// split the string (by inserting \0 characters) into two parts
// and remove the brackets "()" from around the argument
void DetermineWhatCommand(char *userInput)
{
// look for the left-most '('
char *left_bracket = strchr(userInput, '(');
if (left_bracket != NULL)
{
// Seperate the command-name from the argument
*left_bracket = '\0';
// Look for the right-most ')' in the input
char *right_bracket = strrchr(left_bracket+1, ')');
if (right_bracket != NULL)
*right_bracket = '\0'; // remove the right bracket, it's not needed further
//else
// TODO - error? No finishing bracket
// Find the word passed to the function
char *argument = left_bracket+1;
if (strcmp(userInput,"Palin") == 0)
TestIfPalin(argument);
}
else
{
// No brackets - what sort of command is it?
// TODO - error message?
}
}
char *GetUserInput(char *userInput)
{
printf("> ");
fgets(userInput, MAX, stdin);
userInput[strcspn(userInput, "\n")] = '\0';
return userInput;
}
int main()
{
char userInput[MAX] = { '\0' };
char exitTest[] = "exit";
while(strcmp(exitTest, userInput) != 0)
{
GetUserInput(userInput);
if (strcmp(exitTest, userInput) != 0)
DetermineWhatCommand(userInput);
}
return 0;
}
Функции должны иметь одну задачу.TestIfPalin()
не должен искать команду выхода, равно как и getUserInput()
.
Вы пытались прочитать несуществующий userInput
символ *.Убедитесь, что вы понимаете разницу между char-указателями и char-массивами.Массив char, например:
char userInput[MAX];
Имеет MAX символов пространства.Принимая во внимание, что:
char *userInput;
Не имеет пробела и просто указывает куда угодно (возможно, NULL, но это не гарантируется).Это должно указывать на то, что будет использоваться.
char *userInput;
char buffer[MAX];
strcpy(buffer, "bananas"); // OK
strcpy(userInput, "empty!"); // FAILS
userInput = buffer; // userInput is now pointing at buffer
strcpy(userInput, "empty!"); // WORKS (overwrites 'bananas')