【发布时间】:2019-02-11 23:15:32
【问题描述】:
我刚开始学习编程,在学校老师使用的是 Macbook 和一个名为“X-Code”的程序,而在家里我有 Visual Studio (2017) 的 windows。 教员对“setbuf”是什么给出了0解释,还说我们必须在Visual Studio中使用scanf有点不同。现在我在家,完全无助。其实VS说不如试试scanf_s,所以我就做了,程序一直运行,直到我可以输入“操作”。在我输入前两个参数后,它会停止,并且窗口会自行关闭。有没有人能帮帮我,对我不明白的事情给我一点解释?
提前致谢。 这是我写的代码
void main() {
int a, b, c;
char m;
printf("Erstes Argument: ");
scanf_s("%d", &a);
printf("Zweites Argument: ");
scanf_s("%d", &b);
printf("Operation: "),
//setvbuf(stdin,NULL);
scanf_s("%c", &m);
if (m == '*') {
c = a * b;
printf("%d * %d = %d \n", a, b, c);
}
else {
printf("Falsche Operation! \n");
}
return 0;
}
【问题讨论】:
-
其实 VS 说不如试试 scanf_s 是的,Visual Studio 提倡不可移植的、Microsoft 特定的语言扩展,带有关于所需功能的误导性消息由于 C 标准 被“弃用”。请参阅open-std.org/jtc1/sc22/wg14/www/docs/n1967.htm:“由于与规范存在大量偏差,因此不能将 Microsoft 实现视为符合或可移植的。”另见stackoverflow.com/questions/119578/…
-
您可以阅读有关 MSVC 2017 库函数
setbufhere 的信息。将此页面添加为书签,以供将来参考。 -
您的老师可能与我的观点不同:MS 想要统治世界,并警告它认为您不应该使用的标准功能。请坚持使用 C 标准函数。在任何
#include指令之前,我将以下 3 行放在 MSVC 代码中:#define _CRT_SECURE_NO_WARNINGS和#define _CRT_SECURE_NO_DEPRECATE和#define _CRT_NONSTDC_NO_DEPRECATE。可悲的是,他们的一些所谓的“更安全”版本根本不安全,或者有使用标准功能的安全方法。特别是他们的scanf_s系列比标准函数更难使用。 -
例如,你错误地使用了
scanf_s("%c", &m);,因为它需要一个长度参数:"不像scanf和wscanf,scanf_s和wscanf_s需要缓冲区大小为c、C、s、S或包含在[]中的字符串控制集类型的所有输入参数指定。以字符为单位的缓冲区大小作为紧随其后的附加参数传递指向缓冲区或变量的指针。” -
最好在您的家用计算机上安装 x-code,而忘记使用 MS 进行 C 编程。这是一般建议。
标签: c windows macos visual-studio-2017 scanf