我的程序结束时scanf_s()的用途是什么?

时间:2017-01-25 19:59:20

标签: c

在我大学学习编程的最初几个月之后,我一直在文件的末尾或我的代码中的某些战略位置包括scanf_s("%d");,以便控制台在程序完成后不会消失装了。

我似乎无法找到一个简明的答案或解释:

  1. 如果我不写scanf_s("%d");
  2. ,为什么我的控制台会消失
  3. 我使用的是Visual Studio 2015,并注意到早期版本不要求在代码末尾写入。这是为什么?
  4. 这被认为是不好的做法吗?

2 个答案:

答案 0 :(得分:4)

Windows完成执行后会自动关闭控制台程序。 scanf_s,以及scanf,getchar(虽然要注意可能有一些剩余的未处理输入,经常消耗此调用)或系统(“暂停”)(注意 - 特定于Windows,不推荐)防止这种情况发生,迫使期待投入的窗口。

Visual Studio可能阻止了控制台以某种其他方式关闭或在早期版本中使用了某些内部控制台,从而无需使用此解决方法。例如,CLion使用自己的控制台,不会遇到这个问题。此外,如果您从cmd手动启动程序,则无需任何操作来阻止控制台关闭 - 它将在程序执行完毕后返回到先前的状态。

答案 1 :(得分:2)

  
      
  1. 如果我不写scanf_s(“%d”);
  2. ,为什么我的控制台会消失   

正如@Luke已经回答的那样,Windows在内部运行的程序终止时关闭控制台窗口。如果等待用户输入,程序将不会终止,因为scanf_s()和许多其他I / O功能可以实现。

  
      
  1. 我正在使用Visual Studio 2015,并注意到早期版本不要求在代码末尾写入。这是为什么?
  2.   

对我来说,早期版本的VS表现不同。这不是VS特定的行为,而是一般的Windows行为。如果早期版本的行为不同,那就是因为VS的那些版本为运行控制台程序提供了某种特殊规定。

  
      
  1. 有没有其他方法可以防止我的控制台在没有使用scanf_s(“%d”)的情况下消失; ?
  2.   

是。手动打开控制台窗口,然后从命令行运行程序。