1 Востаннє редагувалося letitbe (07.12.2018 20:52:09)

Тема: Введення назви функції та її аргументів із stdin

День добрий.
Моя програма повинна дозволяти користувачу вводити назву функції, що буде виконуватися та аргументи до неї (функції вже описані). Причому користувач може вводити одним рядком, а може і декількома:

D:\>program.exe
get_position
A
1(це результат функції)

або

D:\>program.exe
get_position A
1

Функцій багато, і кожна має різну кількість аргументів:

int get_position(char *ch);
int compare_char(char ch1, char ch2);
int compare_str(char *ch1, char *ch2);
char *replace_with_starts(char *s);
...

Спробував через

char str[1000];
char letter[1000];
fgets(str, 1000, stdin);

if (strcmp(str, "get_position")) {
  fgets(letter, 1000, stdin);
  printf("%d\n", get_position(letter));
  printf("\n");
}

, проте такий спосіб працює лише для порядкового введення.  Буду вдячний за будь-яку допомогу

2

Re: Введення назви функції та її аргументів із stdin

Для початку визначиться із тим, що саме ви вводитимете.
Наприклад,

compare_str abcd def abcd

означатиме

compare_str("abcd def", "abcd");

чи

compare_str("abcd", "def abcd");

?
Якщо ж у параметрах не буде пробілів, то scanf("%s") читає якраз по токенах, до пробіла чи нового рядка.
Для безпеки можна також додавати довжину:

scanf("%999s", str);//не більше ніж 999 символів + \0 в кінці
Подякували: leofun01, letitbe2

3

Re: Введення назви функції та її аргументів із stdin

Щось це мені нагадало мойого викладача лінуксойда, який був навернутий на інтерпретаторі, чогось на кшталт lua...

4 Востаннє редагувалося koala (08.12.2018 01:30:37)

Re: Введення назви функції та її аргументів із stdin

cheappi386 написав:

лінуксойда

В українській мові немає такого суфікса, є запозичений (з латини, здається) -оїд.
В російській, до речі, теж нема, там є -оид, але російською воно вимовляється в один склад і багато людей помилково так пишуть.

5

Re: Введення назви функції та її аргументів із stdin

koala написав:

Для початку визначиться із тим, що саме ви вводитимете.
Наприклад,

compare_str abcd def abcd

означатиме

compare_str("abcd def", "abcd");

чи

compare_str("abcd", "def abcd");

?
Якщо ж у параметрах не буде пробілів, то scanf("%s") читає якраз по токенах, до пробіла чи нового рядка.
Для безпеки можна також додавати довжину:

scanf("%999s", str);//не більше ніж 999 символів + \0 в кінці

Власне, кожний пробіл - відокремлення аргумента від іншого аргумента. Якщо якийсь аргумент стрінг, то це суцільний текст, без пробілів