разделение и сохранение пользовательского ввода из командной строки - PullRequest
0 голосов
/ 14 июня 2019

Мне нужно написать программу, которая включает в себя различные команды, такие как: «пароль входа в систему username», «пароль входа в систему username», «del_user username». Я хочу читать команды построчно из командной строки. Определить их, отделить слова, подсчитайте количество слов в каждой строке и используйте их (например, имя пользователя и пароль) в качестве входных данных для некоторых функций.

Как я могу прочитать строку в c? Как я могу разделить и сохранить слова каждой строки?

Я попытался прочитать ввод с помощью scanf, получает и т. Д.

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Вы можете сделать что-то вроде этого:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_LINE 256
#define MAX_ARGS 4

void process_command(char *command, char *arguments[]) {
    printf("process command %s ", command);
    while (*arguments) {
        printf("%s ", *arguments);
        arguments++;
    }
    printf("\n");
}

int main() {
    char line[MAX_LINE];
    char *command;
    char *arguments[MAX_ARGS + 1];

    while (fgets(line, MAX_LINE, stdin)) {
        memset(arguments, '\0', sizeof(arguments));
        char *token = strtok(line, " \n");
        command = token;
        token = strtok(NULL, " \n");
        for (int i = 0; i < MAX_ARGS && token; i++) {
            arguments[i] = token;
            token = strtok(NULL, " \n");
        }
        process_command(command, arguments);
    }

    return 0;
}

Демо

enter image description here

0 голосов
/ 14 июня 2019

Читайте каждую строку с fgets.
Только с несколькими предметами, попробуйте разобрать максимальное количество предметов. sscanf вернет количество проанализированных элементов. Процесс основан на количестве проверенных элементов и соответствующей команде.

#include <stdio.h>
#include <string.h>

int main ( void) {
    char line[100] = "";
    char command[100] = "";
    char name[100] = "";
    char pw[100] = "";
    char extra[100] = "";
    int result = 0;

    while ( fgets ( line, sizeof line, stdin)) {
        result = sscanf ( line, "%99s%99s%99s%99s", command, name, pw, extra);
        if ( 2 == result) {
            if ( ! strcmp ( "del_user", command)) {
                //process name to del_user
            }
        }
        if ( 3 == result) {
            if ( ! strcmp ( "signup", command)) {
                //process name pw to signup
            }
            if ( ! strcmp ( "login", command)) {
                //process name pw to login
            }
        }
    }

    return 0;
}
...