Я хочу, чтобы пользователь вводил строку, а затем назначал ввод NSString. Сейчас мой код выглядит следующим образом:
NSString *word;
scanf("%s", &word);
Я хочу, чтобы пользователь вводил строку, а затем назначал ввод NSString. Сейчас мой код выглядит следующим образом:
NSString *word;
scanf("%s", &word);
scanf
не работает с любыми типами объектов. Если у вас есть строка C и вы хотите создать NSString из нее, используйте -[NSString initWithBytes:length:encoding:]
.
Функция scanf читает строку C (фактически массив из char), например:
char word[40];
int nChars = scanf("%39s", word); // read up to 39 chars (leave room for NUL)
Вы можете преобразовать массив char в NSString следующим образом:
NSString* word2 = [NSString stringWithBytes:word
length:nChars
encoding:NSUTF8StringEncoding];
Однако scanf работает только с консольными (командной строкой) программами. Если вы пытаетесь получить вход на устройство Mac или iOS, то scanf не является тем, что вы хотите использовать для ввода данных пользователя.
scanf не работает с NSString, поскольку scanf не работает с объектами. Он работает только с примитивными типами данных, такими как:
Что делать?
Технически строка состоит из последовательности отдельных символов. Поэтому, чтобы принять ввод строки, вы можете прочитать последовательность символов и преобразовать ее в строку.
использование:
[NSString stringWithCString:cstring encoding:1];
Вот рабочий пример:
NSLog(@"What is the first name?");
char cstring[40];
scanf("%s", cstring);
firstName = [NSString stringWithCString:cstring encoding:1];
Вот объяснение приведенного выше кода, комментарий по комментарию:
Запустите проект; если вы введете слово и нажмите Enter, программа должна распечатать то же самое слово, которое вы набрали. Просто убедитесь, что слово меньше 40 символов; если вы введете больше, вы можете привести к сбою программы - вы можете проверить это самостоятельно!:]
Взято из: RW.
Вот как я это сделаю:
char word [40];
scanf("%s",word);
NSString * userInput = [[NSString alloc] initWithCString: word encoding: NSUTF8StringEncoding];
да, но sscanf делает и может быть хорошим решением для сложного анализа NSString.
Возможно, это сработает для вас, потому что оно принимает строку с пробелами.
NSLog(@"Enter The Name Of State");
char name[20];
gets(name);
NSLog(@"%s",name);
Простое решение
char word[40];
scanf("%39s", word);
NSString* word2 = [NSString stringWithUTF8String:word];
Класс NSFileHandle является объектно-ориентированной оболочкой для файлового дескриптора. Для файлов вы можете читать, писать и искать в файле.
NSFileHandle *inputFile = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [inputFile availableData];
NSString *word = [[NSString alloc]initWithData:inputData encoding:NSUTF8StringEncoding];