Проверка правильности ввода пользователем длины строки (язык C) - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь создать небольшую программу, которая читает входные данные от пользователя и принимает только строку длиной 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 (и другие условия), но мне не удается его достичь.Заранее спасибо.

1 Ответ

0 голосов
/ 16 февраля 2019

Вы хотите:

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 значение равно 1


Странно также написатьEnter M и для проверки м вместо М и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...