Objective C while 循环不在错误条件下退出
Objective C do while loop not exiting on false condition
循环应该接受名称(并转换为 NSString)直到输入 "done",但它只是继续。我根据类似问题的解决方案在循环内进行了两次不同的检查,但都没有用。
NSMutableArray *names = [[NSMutableArray alloc] init];
char t[150];
NSString *str = @"";
do{
printf("Input a name (enter \"DONE\" to exit)\n");
fgets(t, 150, stdin);
if (strcmp(t, "DONE") ==0)
break;
str = [NSString stringWithCString: t encoding: NSASCIIStringEncoding];
if ([str caseInsensitiveCompare: @"DONE"] == NSOrderedSame)
break;
[names addObject: str];
} while ([str caseInsensitiveCompare: @"DONE"] != NSOrderedSame);
此外,当我将其更改为在 str not 等于 "done" 时退出时,循环成功退出。有什么问题吗?
(我是 Objective C 的新手,所以如果答案显而易见,我深表歉意。)
fgets()
函数会给你一行输入,这一点很重要,包括结尾的换行符!
而且,由于DONE\n
与DONE
不同,它不会退出循环。
处理这个问题的一种方法是自己删除换行符,例如:
fgets(t, 150, stdin);
size_t tlen = strlen (t);
if ((tlen > 0) && (t[tlen-1] == '\n'))
t[tlen-1] = '[=10=]';
或者,您可以去掉行尾的 all white space,例如:
fgets(t, 150, stdin);
size_t tlen = strlen (t);
while ((tlen > 0) && isspace (t[tlen-1]))
t[--tlen] = '[=11=]';
循环应该接受名称(并转换为 NSString)直到输入 "done",但它只是继续。我根据类似问题的解决方案在循环内进行了两次不同的检查,但都没有用。
NSMutableArray *names = [[NSMutableArray alloc] init];
char t[150];
NSString *str = @"";
do{
printf("Input a name (enter \"DONE\" to exit)\n");
fgets(t, 150, stdin);
if (strcmp(t, "DONE") ==0)
break;
str = [NSString stringWithCString: t encoding: NSASCIIStringEncoding];
if ([str caseInsensitiveCompare: @"DONE"] == NSOrderedSame)
break;
[names addObject: str];
} while ([str caseInsensitiveCompare: @"DONE"] != NSOrderedSame);
此外,当我将其更改为在 str not 等于 "done" 时退出时,循环成功退出。有什么问题吗?
(我是 Objective C 的新手,所以如果答案显而易见,我深表歉意。)
fgets()
函数会给你一行输入,这一点很重要,包括结尾的换行符!
而且,由于DONE\n
与DONE
不同,它不会退出循环。
处理这个问题的一种方法是自己删除换行符,例如:
fgets(t, 150, stdin);
size_t tlen = strlen (t);
if ((tlen > 0) && (t[tlen-1] == '\n'))
t[tlen-1] = '[=10=]';
或者,您可以去掉行尾的 all white space,例如:
fgets(t, 150, stdin);
size_t tlen = strlen (t);
while ((tlen > 0) && isspace (t[tlen-1]))
t[--tlen] = '[=11=]';