[英]scanf Function doesn't work in vscode for some reason, any tip?
我习惯了printf和C中的变量,然后我开始使用scanf function,这是代码(无耻地从fresh2ref窃取)
#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 output 或 cmd 上也没有。 它甚至没有从第 5 行打印“输入任何字符”,它表明代码正在运行,但甚至不接受输入(并且只有在我单击停止代码运行按钮后才会停止)
有小费吗?
有一个类似问题的老问题。 (我试图将其标记为重复,但开放的赏金阻止了它。)
format '%s' expects argument of type 'char *', but argument 2 has type 'char (*)[100]' [-Wformat=] scanf("%s", &str);
字符串表示为字符数组,因此数组名称是标识符(隐式转换为指针)是第一个元素的地址,因此在读取字符串时无需指定“&”。
从警告中可以清楚地看出它无法从char (*)[100]
转换为char *
线
scanf("%s", &str);
不正确 - 应该是
scanf("%99s", str);
所以
char *
顺便说一句 - 检查scanf
的返回值可能是个好主意
在 C 中,字符串是字符缓冲区的地址,这就是为什么我们不需要带“&”的变量。 带有解决方案的代码
我的英语很差。 我希望我能帮助你!!
scanf("%s", &str); 这句话是假的。 你知道指针,还是 Memory 地址?
如果你知道,假设你是 scanf 的创建者。 您需要做的是阅读用户在屏幕上写的内容并将它们复制到第二个参数的空间。 所以,你不关心第二个参数的值。 你关心的是第二个参数的地址。 然后就可以访问这个 memory 空间了。 所以,当第二个参数是一个变量时,比如int a,就需要"&a"。 但是 str 本身可以是一个地址。 所以它不需要“&”
您可以选择:运行->添加配置...->启动。json 更改此: "externalConsole": true,
最近我遇到了同样的问题。
所以这里是修复:
希望能帮助到你!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.