где прочитать ввод cmd, например «myapp.exe input» или «myapp.exe -?»(я использую CMD) - PullRequest
1 голос
/ 04 июня 2019

Когда я использую Java, мне нужно набрать команду, например java -? Если пользователь вводит -? в конце, почему приложение знает это, чтобы ответить на вывод?Пожалуйста, скажите мне код для идентификации -?

Ответы [ 4 ]

1 голос
/ 04 июня 2019

В C у вас есть три варианта подписи main. Первый - тот, который не принимает никаких параметров int main(void). Второй int main(), как упомянуто в комментариях, принимает любое количество параметров, но они не называются. Третий, однако, имеет два параметра int main(int argc, char **argv), имена параметров не имеют значения, они просто используются. Эти два параметра служат для предоставления параметров командной строки вашей программе.

  • argc: переменная счетчика, которая содержит число предоставленных аргументов, разделенных пробелами
  • argv: содержит аргументы командной строки в виде массива c-строк

Ваша программа неявно получает всегда один аргумент, который является именем приложения (или \ 0, если среда хоста не может этого предоставить). Вот небольшой пример того, как перебирать аргументы:

#include <stdio.h>

int main(int argc, char **argv) {
    for(int i = 0; i < argc; i++) {
        printf("%s\n", argv[i]);
    }
}
1 голос
/ 04 июня 2019

Они передаются в качестве параметров в main ():

#include <stdio.h>

int main(int argc, const char* argv[])
{
    for (int i = 0; i < argc; i++) {
        printf("Arg %i is %s\n", i, argv[i]);
    }
}

При компиляции и последующем выполнении как

myProgram.exe arg1 stuff ?

Будет выведено

Arg 0 is myProgram.exe
Arg 1 is arg1
Arg 2 is stuff
Arg 3 is ?
0 голосов
/ 04 июня 2019

Если вы можете использовать getopt() или другие подобные функции POSIX. Тогда это один из способов:

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

int main(int argc, char** argv)
{
    int opt;

    while ((opt = getopt(argc, argv, "h?")) != -1)
    {
        switch (opt)
        {
        case '?':
        case 'h':
            printf("Usage: bla bla\n");
            break;    
        }
    }

    return EXIT_SUCCESS;
}

Пример:

~ # /tmp/temp_test -?
Usage: bla bla

~ # /tmp/temp_test -y
/tmp/temp_test: invalid option -- 'y'
Usage: bla bla
~ #

Дополнительная информация на справочной странице .

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

В C main объявлен как:

int main(int argc, char** argv);

первый аргумент - это число параметров, а второй - массив параметров, поэтому, например, в вашем случае вы должны сделать:

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

#define QUESTION_MARK "-?"

int main(int argc, char **argv){
    if(argc > 1){
        char *qsmark = argv[1];
        if(strcmp(qsmark, QUESTION_MARK) == 0){
            printf("argv[1] is -?\n");
        }
    }
    return 0;
}

Помните, что первый аргумент argv - это имя исполняемого файла.Пожалуйста, избегайте сравнения строк руками, используйте стандартную библиотеку, чтобы получить, если то, на что указывает qsmark, действительно равно "-?"

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