验证用户输入的“字符串”长度(C语言)

时间:2019-02-16 18:24:33

标签: c string validation user-input string-length

我正在尝试制作一个小程序,该程序读取用户的输入,并且仅接受长度为1的String。此外,它必须是'm','o','r', “ i”或“ c”。

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

#define CODE_METRO_BUS 'm'
#define CODE_OMNIBUS 'o'
#define CODE_RAPIDE 'r'
#define CODE_INTEGRE 'i'
#define CODE_CARTE_ORANGE 'c'

char userInput[50];

printf("Enter the desired service:\n");
printf("\n");
printf("(Enter M) Metro/Bus\n");
printf("(Enter O) Train/Omnibus\n");
printf("(Enter R) Train rapide\n");
printf("(Enter I) Transport integre\n");
printf("(Enter C) Carte orange\n");
printf("\n");
printf("Choice: ");

fflush(stdin);
scanf("%s",userInput);
while ((userInput!= CODE_METRO_BUS &&
        userInput!= CODE_OMNIBUS &&
        userInput!= CODE_RAPIDE &&
        userInput!= CODE_INTEGRE &&
        userInput!= CODE_CARTE_ORANGE) ||
        (strlen(userInput> 1)) ) {

    printf("Error! Retry: ");
    fflush(stdin);
    scanf("%s",userInput);
}

我真的不确定我该怎么做。当我尝试使用char时,它工作了一半,因为,例如,我在输入“ mfybsn”上输入了内容,该程序刚刚检测到第一个字母(即“ m”),并且验证为正确。但是显然,即使我的旧程序认为是“ mfybsn”是出于某些原因,它也不是“ m”。

现在,正如我所说,我试图使用字符串仅接受长度为1(和其他条件)的“ userInput”,但我无法实现。预先感谢。

1 个答案:

答案 0 :(得分:0)

您想要的:

while ((*userInput!= CODE_METRO_BUS &&
        *userInput!= CODE_OMNIBUS &&
        *userInput!= CODE_RAPIDE &&
        *userInput!= CODE_INTEGRE &&
        *userInput!= CODE_CARTE_ORANGE) ||
        (strlen(userInput) > 1)) ) {

因为 userInput 是一个字符串,而CODE_METRO_BUS和其他字符是字符,并且在检查长度时错误地放置了')'


如果用户输入的字符数超过49个,我建议您将scanf("%s",userInput);替换为scanf("%49s",userInput);,以免从 userInput 中写出,即使读起来很奇怪到49个字符,而只需要1个字符...

检查 scanf 返回的值为1

也很有趣

Enter M并测试 m 而不是 M