繁体   English   中英

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

[英]Validating a user input "string" length (C language)

我正在尝试制作一个小程序来读取用户的输入,并且只接受长度为 1 的字符串。此外,它必须是“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',即使我的旧程序认为这是出于某些原因。

现在正如我所说,如果“userInput”的长度为 1(和其他条件),我正在尝试使用字符串只接受它,但我无法实现它。 提前致谢。

你要 :

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和其他人是字符,并且在检查长度时错误地放置了 ')'


我鼓励你替换scanf("%s",userInput); by scanf("%49s",userInput); 如果用户输入超过 49 个字符,则不要写出userInput ,即使读取最多 49 个字符的字符串而期望只有 1 个字符也很奇怪......

检查scanf返回的值是否为 1 也很有趣


Enter M测试m而不是M等也很奇怪

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM