1
#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<stdlib.h>

int main()
{
char someChar;
char someText[] = "Passport";
puts(someText);
printf("\n Введите символ: ");
scanf("%c", &someChar);
int lenght = sizeof(someText)/sizeof(someText[0]);
int count = 0;
for(int i = 1; i<lenght; i++)
{
if (someText[i] > someChar) count++;
}
printf("\n Символы, которые больше %c: %i", someChar, count);
return 0;
}

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

  • Что значит "закрывается"? Ваша программа - консольное приложение, которое не может "открываться" или "закрываться". Запускайте ее из консоли и смотрите вывод. Не забывайте только перевод строки в конце вывода ставить. Что это вообще за странная манера ставить \n в начале? – AnT stands with Russia Jun 23 '19 at 14:57
  • И почему у вас цикл начинается с 1? – AnT stands with Russia Jun 23 '19 at 14:59
  • 1
    Как минимум длину строки нужно искать через strlen. sizeof(someText) всегда вернёт 4 на х32 и 8 х64. В цикле нумерация с 0. У вас консоль не закрывается? Может такое быть, что вы просто не успеваете прочесть вывод? – Дмитрий Зиненко Jun 23 '19 at 15:01
  • да, через командную строку все работает как надо. а вот если запускать с файла, то видимо да, не успеваю прочесть вывод – Артемий Jun 23 '19 at 15:04
  • а еще вопрос. в программе не поддерживается кириллица, как я понял, все в символах, вместо нормальных слов. Как сделать читабельный вариант? – Артемий Jun 23 '19 at 15:05
  • 1
    Проблему решил, скомпилировав программу в другом компиляторе, теперь все корректно – Артемий Jun 23 '19 at 15:08
  • @Дмитрий Зиненко: Неверно. sizeof(someText) в данном случае вернет именно длину строки плюс 1. someText - это массив. – AnT stands with Russia Jun 24 '19 at 03:09

1 Answers1

1

в программе не поддерживается кириллица

Это сложный вопрос. Он распадается на три:

  1. Используемая кодировка
  2. Поддержка кириллицы в рамках ОС
  3. Поддержка кириллицы в Вашей программе.

Если Вы работаете под Windows, то (скорее всего) кодировка по умолчанию cp1251. Тогда надо в начале программы прописать

Setlocale(LC_ALL, "ru-RU");

(Русский язык в консоли) И всё будет работать, за исключением того, что само понятие "символ, который больше" станет довольно туманным.

Если вы работает в Linux (где кодировка по умолчанию UTF-8), то с отображение символов кириллицы никаких проблем не будет, вот только вся логика Вашей программы накрывается медным тазом. Это происходи потому, что в UTF-8 один (!!!) символ может занимать один байт, два байта... Поэтому Ваша метода расчёт длины строки и сравнения символов на больше/меньше становится неприменимой.

Sergey
  • 13,474