[英]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.