2013-07-24 2 views
0

NSString을 대문자로 변환하는 중 스레드 중단 점 오류가 발생합니다. 질문의 대문자를 대문자로 설정하여 사용자가 아니요, 아니요, 아니요를 입력하고 내부적으로 NO로 바꿀 수 있도록하고 싶습니다. 나는 그것이 0이나 1을 요구할 수 있다는 것을 안다.하지만이 방법을 사용하는 것이 훨씬 더 사용자 친화적이다. 디버그 모드가 켜져 있는데, 이렇게하면 더 간단한 데이터를 얻을 수 있습니다. [string uppercaseString] 줄에 스레드 중단 점이 생깁니다. 출력을 위해 처음 예상 된 디버거 메시지가 표시되지만 두 번째 메시지가 표시되기 전에 프로그램이 중지됩니다.NSString을 대문자 스레드 중단 점으로 바꾸기

#define DEBUG 1 
    NSLog(@"Do you have an account already? YES or NO."); 
    char yesOrNo [20]; 
    fgets (yesOrNo, sizeof yesOrNo, stdin); 
    int c; 
    while ((c = getchar()) != '\n' && c != EOF); 
    if (yesOrNo [strlen(yesOrNo) - 1] == '\n') { //In case the input string has # characters plus \n 
     yesOrNo[strlen(yesOrNo) - 1] = '\0';} //Plus '\0', the '\n' isn't added and the if condition is false 
    NSString *string = [NSString stringWithUTF8String:yesOrNo]; 
    #ifdef DEBUG 
    NSLog(@"DEBBUGER MESSAGE: string == %@", string); 
    #endif 
    NSString *stringUppercase = [string uppercaseString]; 
    #ifdef DEBUG 
    NSLog(@"DEBBUGER MESSAGE: stringUppercase == %@", stringUppercase); 
    #endif 
+0

왜'는 fgets를 사용하는 거에요 '*와 *'getchar'? –

+0

fgets는 사용자 입력 용이며 getchar는 각 사용 후에 표준 입력을 플러시하는 행의 일부입니다. 나는 c-faq.com에서 얻었는데, 나는 이전처럼, 표준 입력을 플러싱하는 데 문제가있는 나 같은 사람들을 위해 계속해서 공유하고있다. –

답변

0

귀하의 fgets/getchar 당신이 무엇을 기대하지 않을 것이다 - fgets은 사용자 입력 후 줄 바꿈을 읽을 것이다, 그 입력은 19 자 이상, 다음 getchar 때까지 입력을 읽을 경우를 제외하고 두 번째 줄 바꿈이 발견됩니다. 대신하려고 :

if (fscanf(stdin, "%3s", yesOrNo) == 1) 
{ 
    // process input 
} 

fscanf 것이다 줄 바꿈 소비하지 - 자세한 내용은 설명서를 참조하십시오. 별도로 자체가 함수에 배치, 그래서 아무것도 작동을 중지하는 경우 그것은 당신의 코드에있는 상황에서 오는 경우 코드가 작동에서

.

HTH

0

sizeof 아마 당신이 당신의 프로그램이 비트에서와 생각하는 방법을 작동하지 않습니다

if (yesOrNo [sizeof (yesOrNo) - 1] == '\n') { //In case the input string has # characters plus \n 
    yesOrNo[sizeof (yesOrNo) - 1] = '\0';} //Plus '\0', the '\n' isn't added and the if condition is false 

당신에게 20yesOrNo 배열의 크기를하지 줄거야 캐릭터 라인의 길이 대신 strlen(3) 사용

if (yesOrNo[strlen(yesOrNo) - 1] ... 
+0

그래서 [strlen (3) (yesOrNo) ...? –

+0

... 아니요, 'strlen (yesOrNo)'입니다. '3'은 맨 페이지 섹션입니다. 링크를 읽었습니까? –

+0

미안하지만 뭔가에 연결되어 있다는 것을 깨닫지 못했습니다. 나는 그것을 시험해 보았다. 그리고 어떤 오류도 없다. 그리고 그것은 \ n과 함께 어떤 문제를 고칠 것이다. 그래서 고마워. 그러나 주요 문제에 답할 수 없어 답변을 수락 할 수 없습니다. :/원래 게시물에서 변경되었습니다. –

관련 문제