【发布时间】: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> 1)没有意义。你的编译器应该对此给出警告。 -
使用
strcmp比较字符串。至少使用 userInput[0] 来获取第一个字符,以便您可以比较 char。 -
如果用户输入许多字符(如 60 左右),您希望
char userInput[50]; ... scanf("%s",userInput);做什么? -
不要
fflush(stdin)。它在 C 中是未定义的行为,在平台定义的地方没有用。
标签: c string validation user-input string-length