我需要帮助才能在 C 中像这样(我不知道如何解释)在命令行中显示名称
$:Enter your name: Test
$:Test>
但是当你继续按 enter 时它仍然显示 Test>
$:Test>
$:Test>
那么我们如何获得 argv[0] 并做这样的事情(抱歉,我可能无法解释)
谢谢
我需要帮助才能在 C 中像这样(我不知道如何解释)在命令行中显示名称
$:Enter your name: Test
$:Test>
但是当你继续按 enter 时它仍然显示 Test>
$:Test>
$:Test>
那么我们如何获得 argv[0] 并做这样的事情(抱歉,我可能无法解释)
谢谢
命令行参数存储在 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(或更多)
只要有可能,您应该使用 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* 的值的合适方式。
如果您考虑到类似 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;
}