int main (int argc, const char * argv[])
{
NSString *str;
int key = 0;
printf("\nEnter a string: ");
scanf("%@", &str);
printf("\nEnter a key (It must be any number from 1 - 25): ");
scanf("%d", &key);
return 0;
}
它只是跳过行scanf("%d", key);
并在此之后结束程序。我已经看到scanf()的其他问题与此类似,但无法找到适合此程序的答案。那么如何阻止它跳过这一行呢?
注意:这是使用Notepad ++的Windows 7上的Objective C
答案 0 :(得分:0)
这是因为您之前使用的scanf!即
scanf("%@", &str);
在这种情况下会发生的情况是,控制台从用户处获取输入字符串,直到用户点击输入键。但是用户按下的输入键被保存在缓冲区中(即'\ n')。当下一个scanf(你试图输入一个整数的那个)被执行时,它会在缓冲区中查找,因为它有'\ n'已经存储,scanf从不接受用户的任何进一步输入,因为它已经收到'\ n'即终止字符
答案 1 :(得分:0)
尝试在第二个scanf之前添加以下代码:
while (getchar() != '\n');
问题是stdin缓冲区中仍然有空格,这使得你的程序“忽略”了。第二次扫描。您也可以使用fflush(stdin)
(在大多数情况下,它可以解决问题),但这实际上是未定义的行为,因此不是最佳做法。
这是常见的C(没有任何客观C特定的)行为。