尝试将NSString转换为大写时,我收到线程断点错误。 我希望将问题的输入设置为大写字母,以便用户可以输入no,No,nO,并且仍然可以在内部将其变为NO。 我知道我可以让它要求0或1,但它更方便用户这样做。 我打开了调试模式,这将提供一些额外的数据,使这更简单。 我在[string uppercaseString]行获得了断点。 对于输出,我第一次得到预期的调试器消息,但程序在第二次显示之前停止。
#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 :(得分: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
它将为您提供yesOrNo
数组的大小,即20
,而不是字符串的长度。请改用strlen(3)
:
if (yesOrNo[strlen(yesOrNo) - 1] ...
答案 1 :(得分:0)
您的fgets
/ getchar
将无法达到预期效果 - fgets
将在用户输入后读取换行符,除非输入超过19个字符,然后{ {1}}将读取输入,直到找到第二个换行符。而是尝试:
getchar
if ( fscanf(stdin, "%3s", yesOrNo) == 1 )
{
// process input
}
将不使用换行符 - 有关详细信息,请参阅文档。
除了你的代码本身放在一个函数中时,你的代码是有效的,所以如果有什么东西阻止它工作,它将来自你的代码所在的上下文。
HTH