0

所以我有这段代码,但它并没有像我想要的那样工作。基本上它应该反复提示用户,然后用户将输入命令和参数。然后程序将响应“输入命令”,然后输入第一个单词。然后用第二个单词和之后的所有单词“输入参数”。

#include <stdio.h>
int main()
{
  char mychar[30];
  char arg[30];
while(1)
{
    printf("G- ");
    fgets (mychar, 100, stdin);
    fgets (arg, 100, stdin);
    printf("Command entered: %s", mychar); 
    printf("Arguments entered: %s", arg);

}
}
4

2 回答 2

1

首先使用 fscanf() 而不是 fgets()。

int main()
{
  char mychar[30];
  char arg[30];
while(1)
{
    printf("Grock- ");
    fscanf (stdin, "%s", mychar);
    fgets (arg, 100, stdin);
    printf("Command entered: %s\n", mychar); 
    printf("Arguments entered: %s\n", arg);

}
}

fscanf() 将第一个参数作为“命令”,其余所有作为“参数”,为此 fgets() 是可以的。

于 2013-10-24T17:30:00.670 回答
0

使用 阅读后fgets(),使用sscanf()进行解析。

"%9s"跳过前导空格,扫描并保存多达 9 个非空格字符。追加\0。
" " 跳过空白。
"%29[^\n]" 不要跳过前导空格。扫描并保存最多 29 个字符,直到字符串结尾或\n. 追加\0。

while(1) {
  printf("Grock- ");
  // fgets(mychar, 100, stdin);  // 100 is bad: see mychar[30]
  if (NULL == fgets(mychar, sizeof(mychar), stdin)) break;
  char command[10];
  char args[30];
  if (2 != sscanf(mychar, "%9s %29[^\n]", command, args)) {
    ; // handle error
  }
  printf("Command entered: '%s'", command); 
  printf("Arguments entered: '%s'", args);
} 
于 2013-10-24T22:12:49.657 回答