Создание цикла, который требует, чтобы первая буква ввода была заглавной, а остальные - нижней. - PullRequest
0 голосов
/ 29 марта 2019

Я должен создать цикл, который требует от пользователя ввести первое число в верхнем и другие в нижнем, если требования не выполняются, пользователь должен вводить еще раз, пока первая буква не будет верхней, а другие не ниже .

var novaDrzava = new Država();
Console.Write("Vnesite ime (prva začetnica naj bo velika, ostale male): ");

novaDrzava.Ime = Console.ReadLine();

var drzava = novaDrzava.Ime;
var inicialka = drzava.Substring(0);
var ostale = drzava.Substring(1, drzava.Length - 1);

for (int i = 0; i <= malecrke.Length; i++) {
    if (inicialka.Contains(velikecrke[i])) {
        if (ostale.Contains(malecrke[i])) {
            break;
        } else {
            Console.WriteLine("Ponovno vnesite ime");
            novaDrzava.Ime = Console.ReadLine();
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 29 марта 2019

Keep looping , пока novaDrzava.Ime не станет действительным:

  using System.Text.RegularExpressions;

  ...

  Console.Write("Vnesite ime (prva začetnica naj bo velika, ostale male): ");

  // Keep looping
  while (true) {
    // Get a new user input
    //   .Normalize() - let diacritics be represent in a standard way
    //   .Trim()      - let be nice and remove leading/trailinf white spaces 
    novaDrzava.Ime = Console.ReadLine().Normalize().Trim();

    // If input is valid one (uppercase followed zero or more lowercase) 
    // we can stop looping 
    if (Regex.IsMatch(novaDrzava.Ime, @"^\p{Lu}\p{Ll}*$")
      break;

    // input is not valid: let user know it and keep asking
    Console.WriteLine("Ponovno vnesite ime");
  }

  // From now on novaDrzava.Ime contains a valid name  
0 голосов
/ 29 марта 2019

Почему бы не принять их ввод и отформатировать его так, как вам нужно?Это устранит необходимость в петле.Что-то вроде:

var teststring = ToUpperFirst("touppercase");

private string ToUpperFirst(string text)
 {
     return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(text.ToLower());

     //alternatively, you could use:
     //return $"{char.ToUpper(text[0])}{(text.Length > 1 ? text.Substring(1).ToLower() : string.Empty)}";
 }
0 голосов
/ 29 марта 2019

Достаточно простого getline, как в C & C ++, просто используйте ifs внутри, чтобы проверить данные, которые он уже вставил, и новые данные, если они соответствуют требованиям, отправляются.

В противном случае, если он поставил неверные данные в ключевой момент, попросите его снова и сбросьте данные, которые он уже ввел.

Это образец, работающий в C, поэтому вы должны иметь возможность скопировать его в C # с небольшой переработкой, для ввода одного символа за один раз.

#include <stdio.h>
#include <stdlib.h>

int is_upper(char *str)
{
    int idx = 0;

  if (str[idx] >= 'a' && str[idx] <= 'z') {
    return (0);
  }
  if (str[idx] >= 'A' && str[idx] <= 'Z') {
    return (1);
  }
  return (2);
}

int main(void)
{
  FILE *fp;
  char *line = NULL;
  size_t len = 0;
  ssize_t read;

  int mystrlen = 0;
  char finalstring[2048]; //to ease the algorithm so there is no need to do a dynamic allocation due to C behavior

  while ((read = getline(&line, &len, stdin)) != -1) {
    if (strlen(line) == 2) { // because \n == 1 char
        if (mystrlen == 0 && line[0] >= 'A' && line[0] <= 'Z') {
            strcat(finalstring, line);
            mystrlen++; //first letter = UPPER CASE
        }
        else if (is_upper(line) == 2 || is_upper(line) == 1 || mystrlen == 0) { //if first letter is good & we aren't at first letter, or simply bad char input
            mystrlen = 0;
            finalstring[0] = '\0';
            printf("reset\n");
        }
        else if (is_upper(line) == 0) { //when all is good
            strcat(finalstring, line);
            printf("\n%s\n", finalstring);
        }
    }
    else {
        mystrlen = 0;
        finalstring[0] = '\0';
        printf("reset\n");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...