我在使用 VScode 时无法使用 scanf 函数

问题描述 投票:0回答:1

我使用 c 为一个类编写了一个简单的程序,并且 printf 可以正常工作;但是,当我添加 Scanf 函数时,甚至 printf 行都不起作用。我的老师在 VS 上使用了相同的代码,它有效,但对我来说没有任何作用。

我确保我已经下载了 C 扩展,一切看起来都很好,只是 Scanf 似乎不起作用。这是有问题的代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
    int num =0;
    printf("%s", "Enter Your number: ");
    scanf("%d", &num);
    printf("number is %d\n", num);

}
c visual-studio-code printf scanf
1个回答
0
投票

问题1

您说:

连 printf 行都不起作用

您是指根本没有输出吗?程序返回吗?你看到下一个 shell 提示了吗?

看起来您正在经历所谓的缓冲。

尝试以下操作: 在

fflush(stdout);
行之前插入
scanf
。您将看到第一个
printf
的结果。

问题2

也许在第 1 部分修复后您会看到提示,但您将无法输入任何内容。在这种情况下,您使用的 IDE 可能存在问题。该 IDE 的“管道”可能做错了。

每个应用程序使用 3 个管道:

stdin
stdout
stderr

stdin
用作
scanf
和其他一些函数的输入,而
stdout
则由
printf
使用。

您的应用程序读取

stdin
,对其进行处理并向
stdout
输出一些内容。

如果您的 IDE 将一些死管道连接到标准输入,而不是真实终端的“键盘输入”管道,那么您必须重新配置它。

这是简单的

bash
管道示例:

$ echo "317" | ./a.out
Enter Your number: number is 317

我已经编译了你的程序并调用了不寻常的方式。

  • 我首先调用了
    echo
    ,它只是将一些内容打印到它自己的标准输出中。
  • 我调用了你的应用程序
  • 我使用管道 (
    |
    ) 符号连接这两个应用程序,因此第一个应用程序的
    stdout
    被馈送到第二个应用程序的
    stdin

您可以使其变得更加先进 - 您可以将多个应用程序通过管道输送到一种形式的传送带 - 一个应用程序的输出被馈送到另一个应用程序。这是一个看起来很明显的例子:

$ echo "317" | ./a.out | hexdump -C
00000000  45 6e 74 65 72 20 59 6f  75 72 20 6e 75 6d 62 65  |Enter Your numbe|
00000010  72 3a 20 6e 75 6d 62 65  72 20 69 73 20 33 31 37  |r: number is 317|
00000020  0a                                                |.|
00000021

长话短说 - 尝试从原始终端运行应用程序并检查它是否有效。如果是这种情况,请检查所有 VS Code 设置并找到用于选择标准输入源的参数。

© www.soinside.com 2019 - 2024. All rights reserved.