scanf 函数由于某种原因在 vscode 中不起作用,有什么提示吗?

我习惯了 C 中的 printf 和变量,然后我开始使用 scanf 函数,这是代码(从fresh2refresh.com 无耻窃取)

#include <stdio.h>
int main()
{
   char ch;
   char str[100];
   printf("Enter any character n");
   scanf("%c", &ch);
   printf("Entered character is %c n", ch);
   printf("Enter any string ( upto 100 character ) n");
   scanf("%s", &str);
   printf("Entered string is %s n", str);
}

除了它没有运行,无论是在 vscode 输出还是 cmd 上。它甚至没有从第 5 行打印“输入任何字符”,它表明代码正在运行,但甚至不接受输入(并且只有在我单击停止代码运行按钮后才会停止)

有小费吗?

stack overflow scanf Function doesn't work in vscode for some reason, any tip?
原文答案

答案:

作者头像

Visual Studio Code: Take Input From User

有一个类似问题的老问题。 (我试图将其标记为重复,但开放的赏金阻止了它。)

作者头像

线

  scanf("%s", &str);

不正确 - 应该是

  scanf("%99s", str);

所以

  1. 它有界限——即不是数组越界
  2. 它正在传递一个 char *

顺便说一句 - 检查 scanf 的返回值可能是个好主意

作者头像

你可以选择:Run->Add Configuration... -> launch.json 改变这个: "externalConsole": true,

作者头像

format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[100]’ [-Wformat=] scanf("%s", &str);

字符串表示为字符数组因此数组名称是一个标识符(隐式转换为指针)是第一个元素的地址,因此在读取字符串的情况下无需指定“&”。

从警告中可以清楚地看出它无法从 char (*)[100] 转换为 char *

作者头像

在 C 中,字符串是字符缓冲区的地址,这就是为什么我们不需要“&”和变量。 Code with solution

作者头像

我的英语很差。我希望我能帮助你!!

scanf("%s", &str);这句话是假的。你知道指针还是内存地址?

如果你知道,假设你是 scanf 的创建者。您需要做的是阅读用户在屏幕上写的内容并将它们复制到第二个参数的空间。所以,你不关心第二个参数的值。你关心的是第二个参数的地址。然后你就可以访问这个内存空间了。所以,当第二个参数是一个变量时,比如int a,就需要"&a"。但是 str 本身可以是一个地址。所以它不需要“&”

作者头像

最近我遇到了同样的问题。

所以这里是修复:

1.在visual studio code中,到extensions中下载“韩君代码运行”
2.然后转到扩展设置>>向下滚动>>并单击在终端中运行
3.你可以重新打开你的vs代码或者跳过这一步。

  1. 现在,再次尝试运行代码。

希望能帮助到你!!

作者头像

我遇到了完全相同的问题,对我有用的是安装 Code Runner,然后转到 Visual Studio 代码的设置。搜索“在终端中运行”,然后确保选中代码运行器:在终端中运行框。

enter image description here

这解决了我的问题,希望对您有所帮助。