Quiero que el usuario ingrese una cadena y luego asigne la entrada a un NSString. Ahora mismo mi código es el siguiente:Usando scanf con NSStrings
NSString *word;
scanf("%s", &word);
Quiero que el usuario ingrese una cadena y luego asigne la entrada a un NSString. Ahora mismo mi código es el siguiente:Usando scanf con NSStrings
NSString *word;
scanf("%s", &word);
scanf
no funciona con cualquier tipo de objeto. Si tiene una cadena en C y desea crear un NSString a partir de ella, use -[NSString initWithBytes:length:encoding:]
.
La función scanf lee en una cadena de C (en realidad una matriz de char), como esto:
char word[40];
int nChars = scanf("%39s", word); // read up to 39 chars (leave room for NUL)
Puede convertir una matriz de caracteres en NSString así:
NSString* word2 = [NSString stringWithBytes:word
length:nChars
encoding:NSUTF8StringEncoding];
Sin embargo scanf solo funciona con programas de consola (línea de comandos). Si intentas ingresar en un dispositivo Mac o iOS, Scanf no es lo que quieres usar para obtener la entrada del usuario.
¿'scanf' funciona con' char * '? No quiero limitar la entrada usando una matriz de caracteres fija. – raffian
@SAFX: sí, pero existen riesgos al usar scanf, consulte [detalles aquí] (http://stackoverflow.com/q/2430303/154803). Es por eso que usé un buffer de tamaño fijo y limité la longitud en scanf. – progrmr
@progrmr Quizás esto esté pasado de moda? Obtengo 'No conozco el método de clase' para la llamada stringWithBytes. – sunny
sí, pero sscanf sí, y puede ser una buena solución para el análisis complejo de NSString.
Ésta es la forma en que lo haría:
char word [40];
scanf("%s",word);
NSString * userInput = [[NSString alloc] initWithCString: word encoding: NSUTF8StringEncoding];
NOTA: No necesita colocar '&' Dado que la palabra no es un puntero, y es la matriz de caracteres real. – ManOx
scanf no funciona con NSString como scanf no funciona en objetos. Funciona sólo en los tipos de datos primitivos tales como:
¿Qué hacer?
Técnicamente una cadena se compone de una secuencia de caracteres individuales. Para aceptar la entrada de cadena, puede leer la secuencia de caracteres y convertirla en una cadena.
uso:
[NSString stringWithCString:cstring encoding:1];
Aquí es un ejemplo de trabajo:
NSLog(@"What is the first name?");
char cstring[40];
scanf("%s", cstring);
firstName = [NSString stringWithCString:cstring encoding:1];
He aquí una explicación del código anterior, comentario por el comentario:
ejecutar el proyecto.; si ingresa una palabra y pulsa Enter, el programa debería imprimir la misma palabra que escribió. Solo asegúrate de que la palabra tenga menos de 40 caracteres; si ingresa más, puede hacer que el programa se cuelgue; ¡puede probarlo usted mismo!:]
Tomado de: RW.
Probablemente sea mejor entender si usa 'NSUTF8StringEncoding' como opción de codificación, no el' 1'. –
¿Cómo manejar nueva línea y espacios en blanco? – anoop4real
solución simple es
char word[40];
scanf("%39s", word);
NSString* word2 = [NSString stringWithUTF8String:word];
Tal vez esto va a funcionar para usted ya que acepta cadena con espacios también.
NSLog(@"Enter The Name Of State");
char name[20];
gets(name);
NSLog(@"%s",name);
La clase NSFileHandle es un contenedor orientado a objetos para un descriptor de archivo. Para los archivos, puede leer, escribir y buscar dentro del archivo.
NSFileHandle *inputFile = [NSFileHandle fileHandleWithStandardInput];
NSData *inputData = [inputFile availableData];
NSString *word = [[NSString alloc]initWithData:inputData encoding:NSUTF8StringEncoding];
¿Cómo se crea una cadena c? ¿Puedes editar mi código para mostrarme cómo? – Omar
Una cadena C es una matriz de caracteres, por lo que simplemente debe escribir 'char word [100]'. –