2013-09-12 6 views
0

Я новичок в Objective C, поэтому никаких сложных слов вам не нужно. Я делаю программу, которая удаляет определенные символы (гласные, согласные, punct и т. Д.), Но когда я пытался для пользователя ввести свой собственный оператор, компилятор просто игнорирует мой fgets (оператор) и игнорирует мое условие while второй раз. Проблема заключается в строке 81-87 (позволяет пользователю вводить те символы, которые они хотят удалить) и строку 98 (оператор ввода while while). Я снова не профессионал, просто знаю некоторые основы. Извините за неправильное форматирование. не знаю, StackOverflow, что хорошоМои вводные заявления игнорируются в моей программе

#import <Foundation/Foundation.h> 
#define max 100 


//characters is the character that the function is going to check for 
NSCharacterSet *isChar(NSString * characters) 
{ 
    NSCharacterSet * theChar=[NSCharacterSet characterSetWithCharactersInString:characters]; 
    return theChar; 
} 
NSString *removeChar(NSString * myInput , NSString * characters) 
{ 

    NSString * name; 
    name=[NSMutableString stringWithString:myInput]; 
    name = [[name componentsSeparatedByCharactersInSet: isChar(characters)] componentsJoinedByString: @""]; 



     return name; 
} 

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 

     char myString[max]; 
     char tempWord[max]; 
     NSInteger length =0; 
     NSInteger otherlength=0; 
     NSString * NewString; 
     NSString * characters; 
     NSString * myInput;   
     int k = 0; 
     char l=('y'); 

     NSLog(@"Enter a String"); 
     fgets(myString, max, stdin); 
     length=strlen(myString); 
     myString [length - 1] = 0; 


     myInput= [[NSString alloc] initWithUTF8String:myString]; 
     while (l=='y') 
     { 

     NSLog(@"What would you like to do?"); 
     NSLog(@"1:Remove Vowels"); 
     NSLog(@"2:Remove Punctuation"); 
     NSLog(@"3:Remove Constanants"); 
     NSLog(@"4:Remove Digits"); 
     NSLog(@"5:Remove whatever you want"); 
     scanf("%d",&k); 
     if (k==1) 
     { 
      [email protected]"aAeEiIoOuU"; 
     } 
     if (k==2) 
     { 
      [email protected]"[email protected]#$%^&*()+_-|}]{[';:/?.>,<"; 
     } 
     if(k==3) 
      { 
       [email protected]"qQwWrRtTyYpPsSdDfFgGhHjJlLzZxXcCvVbBnNmM"; 
      } 
     if (k==4) 
     { 
      characters= @"1234567890"; 
     } 
     if (k==5) 
     {//My problem starts here 
       NSLog(@"Enter a String"); 
       fgets(tempWord, max, stdin); 
       otherlength=strlen(tempWord); 
       tempWord [length - 1] = 0; 


       characters= [[NSString alloc] initWithUTF8String:tempWord]; 

     } 



     NSLog(@"Your orignal string is: %@ ", myInput); 
     NewString=removeChar(myInput,characters) ; 
     NSLog(@"Your new string is: %@", NewString); 

     NSLog(@"Do you want to continue?"); 
     //The scanf works the first time but when it goes thru the loop the second time it 
     //it gets ignored 
     scanf("%c",&l); 
     } 
     NSLog(@"Take Care :)"); 
    } 
    return 0; 
} 
+0

ПОЖАЛУЙСТА, ПОМОГИТЕ !!!!!! – PopperJuan

ответ

1

проблема заключается в том, что scanf("%d",&k) читает только число, но не символ Newline , введенному в терминале. Поэтому следующий fgets() читает только эту строку и ничего .

Одним из возможных исправлений является использование fgets() вместо scanf(), потому что это всегда читает всю строку, включая символ новой строки терминатор, так:

//scanf("%d",&k); 
fgets(tempWord, sizeof(tempWord), stdin); 
k = atoi(tempWord); 

и

//scanf("%c",&l); 
fgets(tempWord, sizeof(tempWord), stdin); 
l = tempWord[0]; 

(Обратите внимание, что fgets() возвращает NULL, если ничего не читать вообще, так что вы должны проверить для этого в вашем коде.)

+0

+1 - может захотеть обратиться к «scanf («% c », &l);» – chux

+0

Я смущен о том, как вы это объяснили ... Опять же, в новой для программирования ... Но я попробовал, и это сработало! ! – PopperJuan

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