0

我需要帮助才能在 C 中像这样(我不知道如何解释)在命令行中显示名称

$:Enter your name: Test
$:Test>

但是当你继续按 enter 时它仍然显示 Test>

$:Test>
$:Test>

那么我们如何获得 argv[0] 并做这样的事情(抱歉,我可能无法解释)

谢谢

4

3 回答 3

2

命令行参数存储在 char **argv 中,其中有 argc。

int main(int argc, char **argv)
{
    int i=0;
    for(i=0; i< argc; i++)
       printf("argument number %d = %s\n", i, argv[i]);
    return 0;
}

argv[0] 是正在执行的程序的名称,所以 argc 总是至少 == 1(或更多)

于 2013-10-03T02:07:11.423 回答
0

只要有可能,您应该使用 getopt() 以便参数的顺序无关紧要。例如,假设您想为大小取一个整数参数,为执行模式取一个整数,以及一个用于指示是否以“安静模式”运行的切换。进一步假设“-h”应该打印帮助并退出。像这样的代码可以解决问题。“s:m:hq”字符串表示“-s”和“-m”提供参数,但其他标志不提供。

int main() {
  // parse the command-line options
  int opt;
  int size = DEFAULT_SIZE, mode = DEFAULT_MODE, quiet = 0;
  while ((opt = getopt(argc, argv, "s:m:hq")) != -1) {
    switch (opt) {
      case 's': size  = atoi(optarg); break;
      case 'm': mode  = atoi(optarg); break;
      case 'q': quiet = 1;            break;
      case 'h': usage(); return 0;
    }
  }
  // rest of code goes here
}

当然,如果 optarg 为空,您应该添加错误检查。

此外,如果您使用 C++,“string(optarg)”是您的 case 语句设置 std::string 以保存在 argv 中存储为 char* 的值的合适方式。

于 2013-10-03T02:18:05.710 回答
0

如果您考虑到类似 shell 的程序,也许以下可能有用:

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

#define BUFSIZE 64

int main() {
  char prompt[BUFSIZE];
  char command[BUFSIZE];
  char *prefix = "$:";
  char *suffix = ">";

  printf("%s%s%s", prefix, "Enter your name:", suffix);
  fgets(prompt, BUFSIZE, stdin);
  prompt[strlen(prompt)-1] = '\0'; // get rid of the \n

  while (true) {
    printf("%s%s%s", prefix, prompt, suffix);
    fgets(command, BUFSIZE, stdin);
    if (strncmp(command,"Quit",4) == 0)
      break;
  }

  return 0;
}
于 2013-10-03T02:47:25.713 回答