Не работает должным образом. Чего мне не хватает?

#c #argv

#c #argv

Вопрос:

программа все еще очень пуста и «голая», потому что я просто пытаюсь убрать логику с пути, прежде чем я действительно начну создавать функции. По какой-то причине, каким бы ни был мой argv [1], он всегда выводит «Справочное сообщение». Чего мне не хватает? У меня плохое предчувствие по поводу этого оператора for, но я не знаю, что с ним не так.

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

void help()
{
    printf("The help messagen");
    exit(1);
}

void a()
{
    printf("The a screenn");
    exit(1);
}

int main(int argc, char *argv[])
{
    char recognised_commands[3] = {help(), a()};
    int i;

    if (argc != 2)
    {
        fprintf(stderr, "usage of sake: "sake [option(s)]"nFor a full listing of all available commands type "-help" or "--help"nn");
        exit(1);
    }
    for (i = recognised_commands[0]; i != recognised_commands; i  )
    {
        printf(argv[1]);
    }
}
  

Правка 1: djikay: Исправлено значение -1 на 0,
Рики: Как мне исправить help () и a (), чтобы вызывать только тот, который пользователь вводит после названия программы (НАПРИМЕР, sake -a)? Я также исправил выход (0). Спасибо

Комментарии:

1. Пожалуйста, скажите мне, что -1 в этом опечатка: recognised_commands[-1] .

2. Это: char recognised_commands[3] = {help(), a()}; кажется, пытается присвоить возвращаемое значение help() , но help() функция ничего не возвращает, она просто печатает сообщение.

3. Над for циклом предстоит немалая работа…

4. Повысьте уровень ошибок вашего компилятора и обратите внимание на то, что он говорит… вы должны получить несколько ошибок для этого кода

Ответ №1:

Строка:

 char recognised_commands[3] = {help(), a()};
  

вызывает вызов обоих help и a . help вызывается первым, выводит справочное сообщение и завершает работу программы.

Комментарии:

1. Это должно привести к ошибке компиляции, поэтому это не должно вызывать help вызова и т.д.

Ответ №2:

 char recognised_commands[3] = {help(), a()};
  

Эта строка определенно является вашей проблемой. Вызываются help() и a() оба, что приводит к выходу из вашей программы.

Почему вы пытаетесь присвоить этим функциям возвращаемые значения там? Обе функции имеют void возвращаемый тип, что означает, что они в любом случае ничего не вернут.

Кстати, вызов exit() с 0 в качестве аргумента означает, что ваша программа завершилась без ошибок. Я бы завершил работу с 1, если это из-за ошибки (или, что еще лучше, EXIT_SUCCESS и EXIT_FAILURE соответственно).