#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 соответственно).