2010-07-10 3 views

ответ

7

scanf не работает с любыми типами объектов. Если у вас есть строка C и вы хотите создать NSString из нее, используйте -[NSString initWithBytes:length:encoding:].

+0

Как вы создаете строку c? Можете ли вы изменить мой код, чтобы показать мне, как это сделать. – Omar

+0

Строка C - это массив символов, поэтому вы просто пишете 'char word [100]'. –

8

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 - это не то, что вы хотите использовать для ввода пользователя.

+0

Работает ли 'scanf' с' char * '? Я не хочу ограничивать ввод с использованием фиксированного массива char. – raffian

+0

@SAFX: да, но есть риск использования scanf, см. [Подробнее здесь] (http://stackoverflow.com/q/2430303/154803). Вот почему я использовал буфер фиксированного размера и ограничил длину в scanf. – progrmr

+0

@progrmr Возможно, это устарело? Я получаю «No know class method» для вызова stringWithBytes. – sunny

1

Да, но sscanf делает и может быть хорошим решением для сложного анализа NSString.

4

Это, как я хотел бы сделать это:

char word [40]; 
scanf("%s",word); 

NSString * userInput = [[NSString alloc] initWithCString: word encoding: NSUTF8StringEncoding]; 
+0

ПРИМЕЧАНИЕ: Вам не нужно указывать '&' Поскольку слово не является указателем и является фактическим массивом символов. – ManOx

7

зсапЕ не работает с NSString, как зсапЕ не работает на объектах. Она работает только на примитивных типов данных, таких как:

  1. INT
  2. поплавка
  3. BOOL
  4. полукокса

Что делать?

Технически строка состоит из последовательности отдельных символов. Поэтому, чтобы принимать строковый ввод, вы можете прочитать последовательность символов и преобразовать ее в строку.

использование:

[NSString stringWithCString:cstring encoding:1]; 

Вот рабочий пример:

NSLog(@"What is the first name?"); 
char cstring[40]; 
scanf("%s", cstring); 

firstName = [NSString stringWithCString:cstring encoding:1]; 

Вот объяснение приведенного выше кода, комментарий на комментарий:

  1. Вы объявляете переменную CString для хранения 40 символов.
  2. Затем вы скажете scanf, чтобы ожидать список символов, используя спецификатор формата% s.
  3. Наконец, вы создаете объект NSString из списка символов, которые читались в

запустить свой проект. если вы введете слово и нажмите Enter, программа должна распечатать то же самое слово, которое вы набрали. Просто убедитесь, что слово меньше 40 символов; если вы введете больше, вы можете привести к сбою программы - вы можете проверить это самостоятельно!:]

Взято из: RW.

+2

Вероятно, лучше понять, используете ли вы 'NSUTF8StringEncoding' в качестве опции кодирования, а не' 1'. –

+0

Как обрабатывать новые линии и пробелы? – anoop4real

0

Простое решение является

char word[40]; 
scanf("%39s", word); 
NSString* word2 = [NSString stringWithUTF8String:word]; 
1

Может быть, это будет работать для вас, потому что он принимает строку с пробелами, а также.

NSLog(@"Enter The Name Of State"); 
char name[20]; 
gets(name); 
NSLog(@"%s",name); 
0

Класс NSFileHandle является объектно-ориентированной оболочкой для файлового дескриптора. Для файлов вы можете читать, писать и искать в файле.

NSFileHandle *inputFile = [NSFileHandle fileHandleWithStandardInput]; 
NSData *inputData = [inputFile availableData]; 
NSString *word = [[NSString alloc]initWithData:inputData encoding:NSUTF8StringEncoding]; 

 Смежные вопросы

  • Нет связанных вопросов^_^