C - 如何处理C程序中的敏感输入?

时间:2015-11-28 18:14:41

标签: c

我正在尝试编写一个程序来处理用户输入C.我必须确保程序接受用户的输入,例如在我的程序中将“y”,“yep”,“yeah”作为“yes”供以后使用(即需要使用strcmp(xx,“yes”)== 0)。我处理了大小写混合字符。

那么如何编写一个函数来总结“y”,“是的”,“是的”并使它们等于“是”毕竟?

  

if((strcmp(letter,“y”)== 0)|| ......)

return "yes";

.......

另外,如果程序要求用户出于某些目的输入问题,如果用户忘记添加问题,是否可以为用户添加问号(?)?

2 个答案:

答案 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?