我需要帮助在C
中显示这样的命令行名称(我不知道如何解释)$:Enter your name: Test
$:Test>
但是当你继续按时输入它仍然显示测试>
$:Test>
$:Test>
那么我们如何得到argv [0]并做这样的事情(很抱歉我无法解释)
谢谢
答案 0 :(得分: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(或更多)
答案 1 :(得分: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为null,您应该添加错误检查。
此外,如果你正在使用C ++,“string(optarg)”是你的case语句设置一个std :: string来保存一个在argv中存储为char *的值的合适方式。
答案 2 :(得分: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;
}