我正在尝试编写一个程序来处理用户输入C.我必须确保程序接受用户的输入,例如在我的程序中将“y”,“yep”,“yeah”作为“yes”供以后使用(即需要使用strcmp(xx,“yes”)== 0)。我处理了大小写混合字符。
那么如何编写一个函数来总结“y”,“是的”,“是的”并使它们等于“是”毕竟?
if((strcmp(letter,“y”)== 0)|| ......)
return "yes";
.......
另外,如果程序要求用户出于某些目的输入问题,如果用户忘记添加问题,是否可以为用户添加问号(?)?
答案 0 :(得分:1)
只需将第一个字母与'y'进行比较即可。例如,如果将用户输入保存在名为user_input
的变量中:
if ((user_input[0] == 'y') || ...)
至于你的第二个问题,你可以添加该选项,例如(它在添加“?”之前验证输入长度,感谢Vane进行更正):
if ((input_length > 0) && (user_input[input_length-1] != '?')) {
strcat(user_input, "?");
}
答案 1 :(得分:0)
有一个名为strncasecmp
的函数并不存在于所有系统(我是Linux用户)上,因为它不是标准函数:
int strncasecmp(const char *s1, const char *s2, size_t n);
如果您的系统中没有该功能,则该功能如下所示:
int strncasecmp(char *s1, char *s2, size_t n){
if (n == 0){
return 0;
}
while (n-- != 0 && tolower(*s1) == tolower(*s2)){
if (n == 0 || *s1 == '\0' || *s2 == '\0'){
break;
}
s1++;
s2++;
}
return tolower(*(unsigned char *) s1) - tolower(*(unsigned char *) s2);
}
您可以像这样使用它:
#include <stdio.h>
#include <strings.h>
int main(void){
char *user_input = "yes";
char *ch = "Y";
if (strncasecmp(user_input, ch, 1) == 0){
printf("True\n");
}else{
printf("False\n");
}
return 0;
}
正如您所看到的,区分大小写没有问题。 strncasecmp
功能位于strings.h
,而不是string.h
如果用户忘记添加问号,是否可以为用户添加问号(?)?
是的,你可以。以下代码是帮助您了解如何执行此操作的方法:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void){
char *question = "What is your Question";
size_t length = strlen(question);
char *addQuestion = malloc(length + 2);
memcpy(addQuestion,question,length + 1);
printf("Before\n%s\n",addQuestion);
strcat(addQuestion, "?");
printf("\n");
printf("After\n%s\n",addQuestion);
free(addQuestion);
return 0;
}
输出:
Before
What is your Question
After
What is your Question?