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
希望本文能帮助您解决问题。
使用 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)
这样,用户就不必按两次回车键了。
希望对你有所帮助
用户可以使用 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
希望本文能帮助您解决问题。
使用 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)
这样,用户就不必按两次回车键了。
希望对你有所帮助