【问题标题】:C Scanf Command Won't RunC Scanf 命令不会运行
【发布时间】:2019-12-27 00:12:37
【问题描述】:

我是 C 语言的新手。我想弄清楚如何使用scanf。这是我目前的代码。

#include <stdio.h>
#include <string.h>

int main() {
    char lastInitial;
    printf("What is your last inital?");
    scanf(" %c", &lastInitial);
}

当我运行这段代码(我正在使用 VS Code)时,它显示文件正在运行,但没有任何显示。当我转到顶部再次单击运行按钮时,它说此代码已经在运行。如果我停止运行,删除 scanf 行并再次运行,文件运行并显示“你的最后一个初始值是什么?”我很困惑为什么将 scanf 添加到文件中会停止 printf 并且不允许任何用户输入。

【问题讨论】:

  • 尝试在 printf 的末尾添加一个 '\n'。
  • 我运行了 OPs 代码,在 linux 上没有任何变化,并且运行良好。
  • 在 scanf 之前执行 fflush 或者 getchar()。

标签: c printf scanf


【解决方案1】:

您可能对printf 的工作方式有些复杂。当您运行 printf("What is your last inital?"); 时,此文本不会以换行符 (\n) 字符结尾。结果,某些环境可能不会立即显示它,将其延迟到您printf 一个完整的行或直到程序结束。这样做是为了提高效率,因为将输出实际输出到屏幕的内部步骤有点昂贵。

当您删除scanf 时,程序在 printf 之后立即结束;当程序结束时,任何仍在等待显示的文本都会由 C 标准库中的内置关闭例程发送到屏幕。但是,当包含scanf 时,文本会被缓冲/延迟,并且不会被发送到屏幕,因为程序会停止等待用户输入。您可以使用换行符强制立即发送输出:

#include <stdio.h>
#include <string.h>

int main() {
    char lastInitial;
    printf("What is your last inital?\n");
    scanf(" %c", &lastInitial);
}

或者如果您不想要换行符,您可以告诉 C 标准库立即显式发送所有输出文本:

#include <stdio.h>
#include <string.h>

int main() {
    char lastInitial;
    printf("What is your last inital?");
    fflush(stdout);
    scanf(" %c", &lastInitial);
}

【讨论】:

    【解决方案2】:

    当你运行程序时,你应该从“OUTPUT”切换到“TERMINAL”。 您需要安装“Code Runner”扩展。

    然后在搜索中找到File--&gt;Preferences--&gt;Settingscode runner,下面会出现code runner的一些设置,需要找到Run In Terminal,并开启。

    仅此而已:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 2017-05-05
      • 1970-01-01
      相关资源
      最近更新 更多