C:从控制台读取可选输入

C: Reading an optional input from console

用户可以使用 2 个命令:

move black

(或)

move

所以 'black' 部分是可选的。

我知道用户输入最多只能输入 50 个字符,所以我可以使用 scanf() 来单独读取每个字符串。

但是,对于第二个选项,我不能使用3次scanf() - 会出现错误(我认为..)。

是否有允许我阅读的功能,如果没有输入,它会通知我?

gets(或 fgets)是否合适? (请记住,该行不超过 50 个字符)。

使用fgets()将所有字符作为输入。

char * fgets ( char * str, int num, FILE * stream );

fgets()stream 中读取字符并将它们作为 C 字符串存储到 str 中,直到 (num-1) 个字符已被读取或换行或结束-of-file 到达,以先发生者为准。

为了更好地理解,请按照程序进行:

#include<stdio.h>
#include<string.h>

int main() {
  char string1[50];
  char string2[50];

  int res;

  printf("String1:\t");
  fgets (string1, 50, stdin); // move black

  printf("String2:\t");
  fgets (string2, 50, stdin);  // move

  res = strcmp(string1, string2); // move black with move

  printf("strcmp(%sstring1,%sstring2) = %d\n",string1,string2,res);
}

输入:

move black

move

输出:

String1: String2: strcmp(move black string1,move string2) = 32

希望本文能帮助您解决问题。

You can run live here.

使用 fgets():

将用户的整个命令读入临时缓冲区
char * fgets ( char * buffer, int num, FILE * stream );

现在,您可以通过 strtok() 函数标记读取输入:

char *strtok(char *string, const char *delimterTokens);

使用 strcmp(),检查与 back 的比较。

我不知道我是否真的理解这个问题,但我会说你只需要用像 scanf/gets/read 这样的函数读取输入,然后使用 [=29] 来切割它=].

为此,您可以使用

char *strtok(char *str, const char *delim) (man page here)

剪切你之前读过的字符串,然后将第二个字符串与

进行比较

int strcmp(const char *s1, const char *s2) (man page here)

这样,用户就不必按两次回车键了。

希望对你有所帮助