Scanf()不会读取整数

时间:2015-09-14 12:59:56

标签: objective-c

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

2 个答案:

答案 0 :(得分:0)

这是因为您之前使用的scanf!即

scanf("%@", &str);

在这种情况下会发生的情况是,控制台从用户处获取输入字符串,直到用户点击输入键。但是用户按下的输入键被保存在缓冲区中(即'\ n')。当下一个scanf(你试图输入一个整数的那个)被执行时,它会在缓冲区中查找,因为它有'\ n'已经存储,scanf从不接受用户的任何进一步输入,因为它已经收到'\ n'即终止字符

答案 1 :(得分:0)

尝试在第二个scanf之前添加以下代码:

while (getchar() != '\n');

问题是stdin缓冲区中仍然有空格,这使得你的程序“忽略”了。第二次扫描。您也可以使用fflush(stdin)(在大多数情况下,它可以解决问题),但这实际上是未定义的行为,因此不是最佳做法。

这是常见的C(没有任何客观C特定的)行为。