检查输入是否与 C 中的单词匹配
Check if input matches word in C
我正在构建一个程序,它需要以命令的形式读取用户的输入,例如 'command 12' 其中命令是特定的单词,需要存储在单独的变量中,后面的数字需要在它的变量也是。
我创建了一个变量,其中是需要匹配命令的word和用于存储的int变量。
char rule[5] = {'r', 'u', 'l', 'e', '[=10=]'};
char command[6];
int cmd_num;
然后用scanf读出来再用strcmp比较
scanf("%s %d", &command, &cmd_num);
if ( (strcmp(command, rule)) != 0)
{
printf("Error.\n");
return 1;
}
然而它并没有像我预期的那样工作。我在谷歌上搜索了几个小时,但我无法找到如何正确存储这个字符串和它后面的数字。谁能帮我理解字符串是如何存储的?这将帮助我理解为什么 strcmp 不能按我期望的方式工作。
或者有没有更好的方法来检查用户输入是否匹配某个单词?它后面的数字对我来说似乎是个问题。我尝试使用 gets 函数,但无法得出结果。提前谢谢你。
首先,可以直接用双引号将rule
定义为字符串(为了避免写入,将其设为常量指针):
const char *rule = "rule";
char command[6];
int cmd_num;
当您使用 scanf
时,限制读取长度以避免缓冲区溢出(使用 %5s
,这是数组的最大大小减去零终止符),并且不传递地址arrays/pointers,因为scanf
已经可以访问要写入的字符串地址:
nb_items = scanf("%5s %d", command, &cmd_num);
请注意,您可以知道扫描了多少项目(声明 int nb_items;
)。例如,如果用户忘记输入数字或输入非数字,您将得到 nb_items==1
并且您将知道 cmd_num
尚未初始化。
这里的主要问题是您有未定义的行为试图将您的 scanf
结果存储在数组地址的地址中。
我正在构建一个程序,它需要以命令的形式读取用户的输入,例如 'command 12' 其中命令是特定的单词,需要存储在单独的变量中,后面的数字需要在它的变量也是。
我创建了一个变量,其中是需要匹配命令的word和用于存储的int变量。
char rule[5] = {'r', 'u', 'l', 'e', '[=10=]'};
char command[6];
int cmd_num;
然后用scanf读出来再用strcmp比较
scanf("%s %d", &command, &cmd_num);
if ( (strcmp(command, rule)) != 0)
{
printf("Error.\n");
return 1;
}
然而它并没有像我预期的那样工作。我在谷歌上搜索了几个小时,但我无法找到如何正确存储这个字符串和它后面的数字。谁能帮我理解字符串是如何存储的?这将帮助我理解为什么 strcmp 不能按我期望的方式工作。
或者有没有更好的方法来检查用户输入是否匹配某个单词?它后面的数字对我来说似乎是个问题。我尝试使用 gets 函数,但无法得出结果。提前谢谢你。
首先,可以直接用双引号将rule
定义为字符串(为了避免写入,将其设为常量指针):
const char *rule = "rule";
char command[6];
int cmd_num;
当您使用 scanf
时,限制读取长度以避免缓冲区溢出(使用 %5s
,这是数组的最大大小减去零终止符),并且不传递地址arrays/pointers,因为scanf
已经可以访问要写入的字符串地址:
nb_items = scanf("%5s %d", command, &cmd_num);
请注意,您可以知道扫描了多少项目(声明 int nb_items;
)。例如,如果用户忘记输入数字或输入非数字,您将得到 nb_items==1
并且您将知道 cmd_num
尚未初始化。
这里的主要问题是您有未定义的行为试图将您的 scanf
结果存储在数组地址的地址中。