Я хочу, чтобы пользователь вводил строку, а затем назначал ввод NSString. Сейчас мой код выглядит следующим образом:Использование scanf с NSStrings
NSString *word;
scanf("%s", &word);
Я хочу, чтобы пользователь вводил строку, а затем назначал ввод NSString. Сейчас мой код выглядит следующим образом:Использование scanf с NSStrings
NSString *word;
scanf("%s", &word);
scanf
не работает с любыми типами объектов. Если у вас есть строка C и вы хотите создать NSString из нее, используйте -[NSString initWithBytes:length:encoding:]
.
scanf функция читает в строку C (на самом деле массив полукокса), например:
char word[40];
int nChars = scanf("%39s", word); // read up to 39 chars (leave room for NUL)
Вы можете преобразовать массив символов в NSString так:
NSString* word2 = [NSString stringWithBytes:word
length:nChars
encoding:NSUTF8StringEncoding];
Однако scanf работает только с консольными (командной строкой) программами. Если вы пытаетесь получить доступ к устройству Mac или iOS, то scanf - это не то, что вы хотите использовать для ввода пользователя.
Работает ли 'scanf' с' char * '? Я не хочу ограничивать ввод с использованием фиксированного массива char. – raffian
@SAFX: да, но есть риск использования scanf, см. [Подробнее здесь] (http://stackoverflow.com/q/2430303/154803). Вот почему я использовал буфер фиксированного размера и ограничил длину в scanf. – progrmr
@progrmr Возможно, это устарело? Я получаю «No know class method» для вызова stringWithBytes. – sunny
Да, но sscanf делает и может быть хорошим решением для сложного анализа NSString.
Это, как я хотел бы сделать это:
char word [40];
scanf("%s",word);
NSString * userInput = [[NSString alloc] initWithCString: word encoding: NSUTF8StringEncoding];
ПРИМЕЧАНИЕ: Вам не нужно указывать '&' Поскольку слово не является указателем и является фактическим массивом символов. – ManOx
зсапЕ не работает с NSString, как зсапЕ не работает на объектах. Она работает только на примитивных типов данных, таких как:
Что делать?
Технически строка состоит из последовательности отдельных символов. Поэтому, чтобы принимать строковый ввод, вы можете прочитать последовательность символов и преобразовать ее в строку.
использование:
[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.
Вероятно, лучше понять, используете ли вы 'NSUTF8StringEncoding' в качестве опции кодирования, а не' 1'. –
Как обрабатывать новые линии и пробелы? – anoop4real
Простое решение является
char word[40];
scanf("%39s", word);
NSString* word2 = [NSString stringWithUTF8String:word];
Может быть, это будет работать для вас, потому что он принимает строку с пробелами, а также.
NSLog(@"Enter The Name Of State");
char name[20];
gets(name);
NSLog(@"%s",name);
Класс NSFileHandle является объектно-ориентированной оболочкой для файлового дескриптора. Для файлов вы можете читать, писать и искать в файле.
NSFileHandle *inputFile = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [inputFile availableData];
NSString *word = [[NSString alloc]initWithData:inputData encoding:NSUTF8StringEncoding];
Как вы создаете строку c? Можете ли вы изменить мой код, чтобы показать мне, как это сделать. – Omar
Строка C - это массив символов, поэтому вы просто пишете 'char word [100]'. –