objective c - español - Objective-C, ¿Entrada de cadena simple desde la consola?
qgis girona (3)
Aquí es como se ve el Objetivo C:
NSString *FNgetInput() {
@autoreleasepool {
return [[[NSString alloc] initWithData:[[NSFileHandle fileHandleWithStandardInput] availableData] encoding:NSUTF8StringEncoding] stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
}
}
Sinceramente, a) hice una búsqueda con palabras clave y b) leí las "preguntas con títulos similares" antes de hacer esto.
También traté de hacer esta pregunta más concisa, pero me fue difícil hacerlo en este caso. Si sientes que la pregunta es demasiado prolija, la entiendo. Simplemente no intentes responder.
Estoy tratando de escribir programas de objetivo-C muy simples que reflejen las tareas básicas en mi clase introductoria de java. Trabajé a través de un libro de object-c durante el verano y ahora quiero hacer muchos problemas de práctica en object-c, al mismo tiempo que hago problemas de práctica de Java. Estoy evitando el entorno de GUI objetivo-c y solo quiero centrarme en trabajar con el idioma por un tiempo. Todavía tengo mucho que aprender sobre cómo resolver las cosas.
El programa que estoy duplicando de mi tarea de Java, es un tipo estándar. Le pido al usuario la entrada de números y la entrada de cadenas a través de la consola. Pude obtener entradas numéricas de la consola usando un ejemplo que encontré aquí usando scan f. (Voy a poner las líneas de código par a continuación). Pero no estoy seguro de cómo obtener la entrada de la consola y almacenarla en una cadena (NSString). Estoy tratando de aprender a usar la documentación de Apple y encontré una referencia a un comando de tipo de escaneo, pero no puedo averiguar cómo USAR el comando. El que parece probable es
scanCharactersFromSet: (NSCharacterSet ) scanSet intoString: (NSString * ) nombre;
Esto es lo que entiendo y funciona.
int age = 0;
NSLog (@"How old are y''all?");
scanf("%d", &age);
NSLog (@"/n Wow, you are %d !", age);
Pero no entiendo cómo recoger una NSString llamada ''nombre''. Pienso que debo hacer que mi ''nombre'' sea un puntero, porque la clase es NSString.
(Por cierto, intenté usar scanf para capturar la cadena, pero al compilador no le gusta que use scanf junto con el nombre. Dice que no debería usar ''scanf'' porque está esperando un tipo de datos diferente. No estoy seguro de dónde encontré el tipo de datos ''i''. Estaba buscando diferentes ideas en mi texto. Supongo que scanf está relacionado con ''scanfloat'' que trata claramente con datos numéricos, por lo que esto no es un gran problema. sorpresa)
Me doy cuenta de que ''scanf'' no es el comando correcto (y realmente no entiendo por qué no puedo encontrar scanf en la documentación de Apple, ¿es posible que sea C?)
Supongo que scanCharactersFromSet puede ser lo correcto, pero no entiendo cómo averiguas qué es lo que va en el comando. Creo que tiendo a aprender con el ejemplo, y no he encontrado un ejemplo. Me gustaría averiguar cómo aprender correctamente leyendo la documentación. Pero todavía no estoy allí.
NSString* name ;
scanf("%i", &name);
//scanCharactersFromSet:(NSCharacterSet *)scanSet intoString:(NSString **)name;
...
Mi libro está orientado a pasar a un entorno gui, por lo que no se trata de entradas.
Gracias por los punteros que puedas darme.
Laurel
La forma de obtener datos de la entrada estándar (o cualquier otro identificador de archivo) en cacao es usar la clase NSFileHandle
. Compruebe los documentos para +fileHandleWithStandardInput
Recomendaría aumentar la velocidad en C. Objective-c es una capa delgada sobre C y ese conocimiento se pagará por sí mismo una y otra vez.
Hay varias formas en C de leer:
http://www.ehow.com/how_2086237_read-string-c.html
Por ejemplo:
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
char str[50] = {0}; // init all to 0
printf("Enter you Last name: ");
scanf("%s", str); // read and format into the str buffer
printf("Your name is %s/n", str); // print buffer
// you can create an NS foundation NSString object from the str buffer
NSString *lastName = [NSString stringWithUTF8String:str];
// %@ calls description o object - in NSString case, prints the string
NSLog(@"lastName=%@", lastName);
[pool drain];
return 0;
NOTA: el scanf simple es susceptible de saturar los búferes. Hay múltiples enfoques en torno a esto. ver:
¿Cómo prevenir scanf causando un desbordamiento de búfer en C?