【问题标题】:How to make the console output window stay open in Visual Studio 2015 stay open when extra input is given?给出额外输入时,如何使 Visual Studio 2015 中的控制台输出窗口保持打开状态?
【发布时间】:2016-01-04 20:29:22
【问题描述】:

我在 Visual Studio 2015 中编写了以下程序-

#include <stdio.h>
#define PRAISE "You are an extraordinary being."
int main(void)
#pragma warning(disable : 4996)
{
    char name[40];

    printf("What's your name? ");
    scanf("%s", name);
    fflush(stdin);
    printf("Hello, %s. %s\n", name, PRAISE);

    getchar();
    getchar();
    getchar();
    getchar();

    return 0;
}

程序在所有情况下都运行良好。但是当我提供“Shabbir”、“Shabbir K”和“Shabbir Kh”作为输入时,控制台窗口保持打开状态。如果我提供“Shabbir Kha”作为输入,控制台窗口将不会保持打开状态。

如您所见,控制台窗口保持打开状态,直到第二个单词达到三个字符长度。如果第二个单词长度为三个或更多字符,则它不会保持打开状态。

相同的程序在 Code Blocks 13.12 中没有显示任何问题。

【问题讨论】:

  • 不要打电话给fflush(stdin)——一般情况下是UB。
  • 当调用 scanf(), 1) 在 %s 上放置一个大小修饰符,即scanf("%39s", name); 所以用户不能溢出输入缓冲区。对 40 字节的 name[] 数组使用 39,因为 scanf() 在字符串输入上附加了一个 NUL 字符。 2)始终检查返回值(不是参数值)以确保操作成功。
  • 谢谢你,@PaulR。我不知道这是未定义的行为。我们的讲师教我们使用fflush(stdin) 来防止不需要的用户输入扰乱我们的程序。您能否建议一种更便携的方式来完成同样的工作?
  • @ShabbirKhan:没有简单、方便和可移植的方法 - 但在某些情况下,您可以使用以下 user3629249 的方法。如果您想阅读此主题,StackOverflow 上也有很多很好的相关问题和答案。
  • @PaulR:好的,谢谢!我会这样做的。

标签: c windows console visual-studio-2015 windows-console


【解决方案1】:

保持窗口打开:

while( getchar() != EOF );
getchar();

【讨论】:

  • 感谢您的代码。它完全有效。我实际上是在使用这些输入进行测试,因为我正在学习的这本书使用了两个词。
  • 顺便说一句,我现在必须使用 X 按钮关闭窗口。有什么方法可以通过您给出的键盘输入来关闭控制台窗口?
  • 您可以按 Control-Z (Windows) 或 Control-D(适当的操作系统)来发出 EOF 信号,而不是手动关闭窗口。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多