gpt4 book ai didi

c - 制作一个简单的计算器

转载 作者:行者123 更新时间:2023-11-30 16:48:04 24 4
gpt4 key购买 nike

我正在尝试为类(class)构建一个简单的计算器,但由于某种原因该程序不断崩溃。
我环顾四周,没有看到任何可以告诉我出了什么问题的东西,所以我想我会在这里问。
现在的技巧是我们只学习了 if/else 语句,因此这是我们唯一可以使用的函数。

#include <stdio.h>

void main() {
float num1, num2;
int type;
char oper;

printf_s("Please enter your choise:\n1. Decimal calculator.\n2. Binary calculator.\n");
scanf_s("%d", &type);

if (type == 1) {
printf_s("Please enter the equation you want to solve and then press Enter:\n");
scanf_s("%f %c %f",&num1,&oper,&num2);
}
}

有人知道这里出了什么问题吗?例如,每次我输入 1 + 1 时,程序就会崩溃。

谢谢!

最佳答案

你的问题是 scanf_s 需要 buffer size specifier after every %c %s and %[ 。请参阅this post对于类似的问题。事实上,scanf 没有这个问题,您实际上所做的是将 num2 地址的值作为 %c 的缓冲区大小说明符:

scanf_s("%f %c %f",&num1,&oper,&num2); 

请注意,甚至 printf_s has additional requirements

仍然使用 scanf_s 时的修复是这样的:

#include <stdio.h>


int main() {
float num1, num2;
int type;
char oper;
const int oper_buff_size = 1;

printf_s("Please enter your choise:\n1. Decimal calculator.\n2. Binary calculator.\n");
scanf_s("%d", &type);

if (type == 1) {
printf_s("Please enter the equation you want to solve and then press Enter:\n");
// note oper_buff_size, the buffer size of the char pointer
scanf_s("%f %c %f", &num1, &oper, oper_buff_size, &num2);
// test to show this works
printf_s("Entered: %f %c %f", num1, oper, num2);
}
return 0;
}

您可能会问为什么我们需要指定 %c 格式的长度,因为它应该只是字符的大小(以字节为单位)。我相信这是因为您需要将字符的指针用于格式,因此您不知道您指向的是 char * 数组还是只是指向 char 的指针(如在这种情况下)

我还要添加一个附录,尽管这不是您的程序失败的原因,但请避免使用跨平台不兼容的怪癖,例如 void main,因为它使人们更难找到代码中的真正问题。不要使用void main(),使用int main(...) and return 0; instead 。 void main 在标准 C 或 C++ 中无效,这是 Microsoft Visual Studio 语言实现的一个怪癖。

关于c - 制作一个简单的计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43121159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com