簡體   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