Вопросительные знаки в консоли. Почему вместо того что в переменной мне выводи вопросительный знак?
static void Main(string[] args)
{
string str = "Семейная компания дяди развивается с завидным успехом";
int space = 0;
int upper = 0;
int lower = 0;
double pr = str.Length / 100;
for (int i = 0; i<str.Length; i++)
{
if(str[i] == ' ')
{
space++;
}
else if(str[i].ToString() == str[i].ToString().ToLower())
{
lower++;
}
}
upper = str.Length - lower - space;
double prup = upper / pr;
double prlw = lower / pr;
Console.WriteLine($"Строчных букв {prup}% а прописных {prlw}%");
}
Ответы (1 шт):
Автор решения: Yotic
→ Ссылка
Это знак бесконечности, просто его не поддерживает кодировка консоли, похоже у тебя pr = 0, поэтому x / 0 = ∞.
(int / int) выдаст целое число. То есть:
99 / 100 = 0
100 / 100 = 1
178 / 100 = 1
У тебя str.Length менее 100, поэтому ( x < 100) / 100 выдаёт 0, в конце концов что выдаёт "∞", а консоль "?".
Вообще то, что ты хочешь сделать делается по другому.
static void Main(string[] args)
{
string str = "Семейная компания дяди развивается с завидным успехом";
int up = str.ToString().Where(z => char.IsUpper(z)).Count();
int down = str.ToString().Where(z => char.IsLower(z)).Count();
double percentUp = (double)100 * up / (up + down);
Console.WriteLine($"Заглавных букв - {Math.Round(percentUp, 2)}%,\nПрописных - {Math.Round(100 - percentUp, 2)}%.");
}
/*
str.ToString() - Выдаст new char[] { 'С', 'е', 'м', 'е'...}.
Where - выбирает из этого char[] только то, что подходит нам, в первом случае char.IsUpper(char), а во втором IsLower(char) и возвращает IEnumerable<char>.
Count - метод или свойство,
в IEnumerable - метод
в List - свойство
отвечающее за количество элементов в массиве.
Чтобы получить процент заглавных букв нужно по форуме 100 * (x+y) / x
А чтобы строчных просто 100 - количество заглавных
Math.Round(num, d) - округляет в верх, где num - число, а d - количество цифр после запятой
*/
