我需要帮助在 C 中像这样在命令行中显示名称(我不知道如何解释)
$:Enter your name: Test
$: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 = %sn", i, argv[i]);
return 0;
}
argv[0] 是正在执行的程序的名称,因此 argc 始终至少为 == 1(或更多)
如果你有相当像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] = ' '; // 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;
}
只要有可能,你应该使用 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* 的值的合适方式。