Utilizzo di scanf con NSStrings

Voglio che l’utente inserisca una stringa e poi assegni l’input a una NSString. In questo momento il mio codice assomiglia a questo:

NSString *word; scanf("%s", &word); 

scanf non funziona con nessun tipo di object. Se si dispone di una stringa C e si desidera creare una NSString da essa, utilizzare -[NSString initWithBytes:length:encoding:] .

La funzione scanf si legge in una stringa C (in realtà una matrice di caratteri), come questa:

 char word[40]; int nChars = scanf("%39s", word); // read up to 39 chars (leave room for NUL) 

È ansible convertire un array di caratteri in NSString in questo modo:

 NSString* word2 = [NSString stringWithBytes:word length:nChars encoding:NSUTF8StringEncoding]; 

Tuttavia scanf funziona solo con programmi di console (riga di comando). Se stai cercando di ottenere input su un dispositivo Mac o iOS, scanf non è ciò che desideri utilizzare per ottenere input da parte dell’utente.

scanf non funziona con NSString poiché scanf non funziona sugli oggetti. Funziona solo su tipi di dati primitivi come:

  1. int
  2. galleggiante
  3. BOOL
  4. carbonizzare

Cosa fare?

Tecnicamente una stringa è composta da una sequenza di singoli personaggi. Quindi, per accettare l’input da stringa, puoi leggere la sequenza di caratteri e convertirla in una stringa.

uso:

 [NSString stringWithCString:cstring encoding:1]; 

Ecco un esempio funzionante:

 NSLog(@"What is the first name?"); char cstring[40]; scanf("%s", cstring); firstName = [NSString stringWithCString:cstring encoding:1]; 

Ecco una spiegazione del codice sopra, commento per commento:

  1. Dichiarate una variabile chiamata cstring per contenere 40 caratteri.
  2. Quindi comunichi a scanf di aspettarsi un elenco di caratteri usando l’identificatore di formato% s.
  3. Infine, si crea un object NSString dall’elenco di caratteri letti.

Esegui il tuo progetto; se inserisci una parola e premi Invio, il programma dovrebbe stampare la stessa parola che hai digitato. Assicurati solo che la parola abbia meno di 40 caratteri; se entri di più, potresti causare il crash del programma: sei libero di provarlo tu stesso! :]

Tratto da: RW.

Questo è come lo farei:

 char word [40]; scanf("%s",word); NSString * userInput = [[NSString alloc] initWithCString: word encoding: NSUTF8StringEncoding]; 

sì, ma sscanf lo fa e potrebbe essere una buona soluzione per l’analisi complessa di NSString.

Forse questo funzionerà per te perché accetta anche la stringa con spazi.

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

La soluzione semplice è

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

La class NSFileHandle è un wrapper orientato agli oggetti per un descrittore di file. Per i file, puoi leggere, scrivere e cercare all’interno del file.

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