2013-10-03 13 views
0

我需要帮助的显示名称类似这样的命令行(我不知道该怎么解释)命令行用C参数Ç

$:Enter your name: Test 
$:Test> 

但是当你继续按回车它仍然显示测试>

$:Test> 
$:Test> 

那么,我们如何得到的argv [0],做这样的事情(对不起,我不能大概解释)

谢谢

+1

我回答了有关如何获得命令行参数这里之前的问题:http://stackoverflow.com/问题/ 18937861/C-如何做通吃多档换参数/ 18939140#18939140。看看是否有助于你开始。 – lurker

+0

你想写一个交互式程序吗?还有一种设置该程序提示的方法? –

+1

还是你想重命名命令行提示符? – Duck

回答

0

如果你脑子里想的,而壳状的程序,也许使用以下couldbe:

#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; 
} 
+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(或更多)

+0

谢谢我需要那个... +1 –

+1

你忘了声明'argc'参数的类型。所以你的例子不会编译。 ;) – lurker

+0

谢谢,修复它。 –

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 *的值的适当方法。

+0

我认为这个问题是解析用户输入的一个类似shell的交互式程序 – jev