我使用 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);
}
您说:
连 printf 行都不起作用
您是指根本没有输出吗?程序返回吗?你看到下一个 shell 提示了吗?
看起来您正在经历所谓的缓冲。
尝试以下操作: 在
fflush(stdout);
行之前插入 scanf
。您将看到第一个printf
的结果。
也许在第 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 设置并找到用于选择标准输入源的参数。