我正在尝试制作一个小程序,以读取用户的输入,并且仅接受一个长度为1的字符串'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/Busn");
printf("(Enter O) Train/Omnibusn");
printf("(Enter R) Train rapiden");
printf("(Enter I) Transport integren");
printf("(Enter C) Carte orangen");
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(和其他条件),但我试图使用字符串仅接受"用户输入",但我无法实现它。预先感谢。
您想要:
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);
替换为scanf("%49s",userInput);
,不要用 userInput 写出,如果用户输入超过49个字符,即使只读取一个字符串的字符串最多49个字符也很奇怪,而期望只有1个字符...
检查 scanf is 1
返回的值也很有趣编写Enter M
并测试 m 而不是 m etc et