Если вы пытались решить проблемы онлайн-кодирования при кодировании веб-сайтов с помощью Objective-C, вы, возможно, поняли, что сложно даже заставить веб-сайт скомпилировать ваш код. Его жалобы начнутся с библиотек, которых вам не хватает, и они продолжатся с тем, что вы не читаете из STDIO (стандартный ввод) или не отправляете в STDOUT (стандартный вывод). Пример кода, который заставит все работать для одной из этих задач (мы будем использовать 30-дневную задачу HackerRank Day 1 в качестве примера), находится внизу сообщения, так что вы можете сразу перейти к нему и скопировать/вставить. Я в порядке с этим, так как я также сделал некоторые поиски в Интернете, чтобы собрать это вместе. Однако, если вам интересно, что представляет собой этот код, то я предлагаю вам прочитать дальше! (Обратите внимание, однако, что веб-сайт кодирования, который вы используете, должен поддерживать Objective-C. В этом случае HackerRank поддерживает.)

Задача! (взято с веб-сайта HackerRank; 30-дневное соревнование по программированию, день 1)

Чтобы выполнить это задание, вы должны сохранить строку ввода изSTDINв переменную, напечатать «Hello, World». в одной строке и, наконец, напечатайте значение вашей переменной во второй строке.

Первый шаг. Импортируйте базовую библиотеку Objective-C:

#import ‹Foundation/Foundation.h›

В большинстве случаев вам не нужно будет импортировать какую-либо другую библиотеку, потому что в основе будут все необходимые базовые объекты (включая некоторые функции C, которые потребуются для этой задачи). Это важно отметить, так как мы не импортируем и не #включаем что-либо еще. «#include» — это C-версия «#import». Его можно рассматривать как примитивную версию #import, потому что #include добавляет библиотеку в код везде, где он написан. #import добавляет библиотеку в код только один раз.

Второй шаг: создайте основную функцию.

внутренний основной()

{

//…

вернуть 0; //возвращаем ноль

}

Основная функция — это место, где начинается код Objective-C (или C, поскольку Objective-C основан на C). Когда ваша программа запускается, даже если вы щелкаете/нажимаете на нее или вызываете ее на своем терминале, на самом деле именно ОС (операционная система вашего компьютера – телефон/планшет/часы и т. д.-) запрашивает запуск программы. Вот почему функция main имеет возвращаемое значение. Потому что ОС ожидает, что программа вернет ей значение, чтобы подтвердить, все ли прошло нормально или произошла ошибка. Возврат 0 (ноль) будет означать, что все прошло хорошо, никаких проблем! Любое ненулевое значение будет кодом ошибки, и каждая ОС будет использовать коды ошибок, чтобы определить, что пошло не так, когда что-то пошло не так с программой. Если вам интересно, действительно ли ваш проект Objective-C имеет основную функцию, да, это так! Он находится в файле «main.m» в каждом проекте, который мы создаем (смотрите в разделе «Вспомогательные файлы», если вы не можете найти его где-либо еще. :-))

Вы увидите, что функция main в вашем файле main.m имеет несколько аргументов в скобках (int argc, char * argv[])! Это аргументы функции, которые будет получать основная функция, в отличие от получения входных данных напрямую через стандартный ввод (аналогично добавлению параметра -l к вашей команде ls на вашем терминале). Нам они не нужны для нашей задачи здесь, так как мы работаем только с чтением из стандартного ввода и записью в стандартный вывод.

Теперь давайте заполним пустое место в нашей основной функции, не так ли?

Третий шаг. Получите пользовательский ввод из консоли (он будет введен здесь веб-системой автоматически) и поместите его в строку, чтобы ее можно было распечатать.

символ *слово;

scanf("%[^\n]s",word);

NSString* word2 = [NSString stringWithFormat:@"Hello, World.\n%@",[NSString stringWithCString:кодировка слова:NSUTF8StringEncoding]];

Итак, что это за char *word там? Это указатель типа char, указывающий на место в памяти, и это место является начальной точкой цепочки символов, которая будет составлять строку. Помните, что строка — это цепочка символов в памяти. Вот как строка будет представлена ​​в C. Мы используем строку версии C вместо класса NSString, потому что нам нужно будет использовать функцию C для получения ввода из стандартного ввода.

Функция для получения пользовательского ввода (в данном случае это IDE/код веб-сайта) из стандартного ввода — это функция scanf(). Мы передали бы ему нашу строку «char *» (переменная word в этом коде) и использовали бы форматирование, с которым мы очень хорошо знакомы из метода «stringWithFormat:» NSString. [^/n] просто говорит scanf() исключить символ возврата/ввода в конце. После выполнения функции scanf() у нас есть строка «слово»!.

Поскольку это обычная старая строка C, нам нужно будет преобразовать ее в объект NSString. Мы используем очень полезный метод NSString «stringWithCstring:». Поскольку задача просит нас создать строку, добавив входную строку к «Hello, World!», мы используем метод NSString «stringWithFormat:», чтобы сложить их вместе. В конце всего этого у нас есть готовый красивый объект NSString. На данный момент, если бы мы хотели сделать что-то еще с помощью Objecive-C, мы бы смогли это сделать!

Последний шаг: вывод на стандартный вывод.

printf("%s", [word2 cStringUsingEncoding:NSUTF8StringEncoding]);

В документации по NSlog Apple объясняет нам, почему мы не можем использовать NSLog для вывода на стандартный вывод (экран консоли/терминала). Мы не можем, потому что NSLog печатает в стандартный поток ошибок! Чтобы напечатать на стандартный вывод (STDOUT), нам нужно обратиться за помощью к нашему старому другу, функции C printf().

Синтаксис Printf() также похож на синтаксис NSLog. Мы используем форматирование так же, как и в NSLog. Единственный момент, на который следует обратить внимание, это то, что мы фактически конвертируем NSString обратно в строку C с помощью метода «cStringUsingEncoding:». Это может выглядеть странно, поскольку мы только что преобразовали строку C в объект NSString, а теперь возвращаемся к строке C! Да, мы делаем это, и у нас есть на это причины :-)

Как только мы создали объект NSString, мы можем делать с нашим объектом NSString все, что захотим, используя Objective-C, пока нам не понадобится снова вывести строку на стандартный вывод, что мы и делаем сейчас, поэтому все ваши базы закрыты! Плюс, если бы мы этого не сделали, строка по-прежнему была бы строкой C, а код был бы на 100% C. Мы хотим иметь возможность использовать Objective-C, отсюда и преобразования!

О стандартном вводе и выводе можно прочитать здесь и здесь. Краткую документацию по NSLog можно посмотреть здесь. Я полагаю, что для получения более подробной документации по NSLog вам потребуется выполнить поиск в документации по XCode (или на веб-сайте разработчиков Apple после входа в систему со своим Apple ID). Ниже приведен весь код:

#import ‹Foundation/Foundation.h›

внутренний основной()

{

символ *слово;

scanf("%[^\n]s",word);

NSString* word2 = [NSString stringWithFormat:@"Hello, World.\n%@",[NSString stringWithCString:кодировка слова:NSUTF8StringEncoding]];

printf("%s", [word2 cStringUsingEncoding:NSUTF8StringEncoding]);

вернуть 0;

}

Я надеюсь, что это помогает кому-то!