【问题标题】:Validating a user input "string" length (C language)验证用户输入的“字符串”长度(C 语言)
【发布时间】:2019-02-16 18:24:33
【问题描述】:

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

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

【问题讨论】:

  • strlen(userInput&gt; 1) 没有意义。你的编译器应该对此给出警告。
  • 使用strcmp 比较字符串。至少使用 userInput[0] 来获取第一个字符,以便您可以比较 char。
  • 如果用户输入许多字符(如 60 左右),您希望 char userInput[50]; ... scanf("%s",userInput); 做什么?
  • 不要fflush(stdin)。它在 C 中是未定义的行为,在平台定义的地方没有用。

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


【解决方案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等是字符,而且检查长度时放错了')'


如果用户输入超过 49 个字符,我鼓励您将 scanf("%s",userInput); 替换为 scanf("%49s",userInput); 以不写出 userInput,即使读取最多 49 个字符的字符串也是很奇怪的只需要 1 个字符 ...

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    相关资源
    最近更新 更多