我正在尝试制作if语句,而且我很少运气。现在我正在尝试使用if语句制作一个非常简单的三角计算器,但我无法使其工作。输入trig函数(正弦,余弦,正切)后会出现实际问题。这就是发生的事
我编译它
2.输出用户提示
3.我输入功能并点击输入
4.程序跳转到一个新的空白行
5.没有任何反应,如果我按下
这是代码本身。如果我做了一些非常愚蠢的事情,请善待我,我对C.很新。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(void)
{
float x;
float a, o, h;
float sine, cosine, tangent;
printf("Enter the trig function you wish to calculate: ");
scanf("%f", &x);
if (x == sine)
{ printf("Enter the value of the opposite leg: ");
scanf("%f", &o);
printf("Enter the value of the hypotenuse: ");
scanf("%f", &h);
sine = o / h;
printf("The sine is equal to %f", sine);
}
if (x == cosine)
{ printf("Enter the value of the adjacent leg: ");
scanf("%f", &a);
printf("Enter the value of the hypotenuse: ");
scanf("%f", &h);
cosine = a / h;
printf("The cosine is equal to %f", cosine);
}
if (x == tangent)
{ printf("Enter the value of the opposite leg: ");
scanf("%f", &o);
printf("Enter the value of the adjacent leg: ");
scanf("%f", &a);
tangent = o / a;
printf("The tangent is equal to %f", tangent);
}
getch();
}
感谢所有真正有帮助并且对我缺乏理解并不粗鲁的人,我没有意识到我必须添加一个数字而不仅仅是一个角色。
答案 0 :(得分:7)
是的,你正处于做有经验的程序员会称之为愚蠢的各种事情的边缘,但是他们是新手所犯的错误(你既不是第一个也不是最后一个犯错误。)< / p>
int main(void)
{
float x;
float a, o, h;
float sine, cosine, tangent;
printf("Enter the trig function you wish to calculate: ");
scanf("%f", &x);
if (x == sine)
主要问题是您没有提供sine
,cosine
或tangent
值,因此您不知道要输入什么来使等式有效。
第二个问题是比较浮点数是否合适不是一个好主意。
你可能会做的最好:
int main(void)
{
int x;
float a, o, h;
enum { sine, cosine, tangent };
printf("Enter the trig function (0 = sine, 1 = cosine, 2 = tangent): ");
scanf("%d", &x);
if (x == sine)
这或多或少是正统的,读取和比较整数的平等是可靠的。您必须更改操作,因为我已将名称sine
,cosine
和tangent
抢占为枚举(整数)常量。你可以通过使用常量的大写名称(这是非常正统的),或者使用名称的前缀来解决这个问题,或者......
int main(void)
{
int x;
float a, o, h;
float sine, cosine, tangent;
enum { SINE, COSINE, TANGENT };
printf("Enter the trig function (0 = sine, 1 = cosine, 2 = tangent): ");
scanf("%d", &x);
if (x == SINE)
正如您可能从下面的评论中收集的那样,最好允许用户输入他们想要输入的功能的名称,而不是让他们输入编码的号码。编码可靠性有点棘手,这是我使用数字留下上面答案的主要原因。
#include <stdio.h>
#include <string.h>
int main(void)
{
char line[4096];
printf("Enter trig function you wish to calculate: ");
if (fgets(line, sizeof(line), stdin) != 0)
{
char *nl = strchr(line, '\n');
if (nl != 0)
*nl = '\0';
if (strcmp(line, "sine") == 0)
{
/* Process sine */
}
else if (strcmp(line, "cosine") == 0)
{
/* Process cosine */
}
else if (strcmp(line, "tangent") == 0)
{
/* Process tangent */
}
else
{
fprintf(stderr, "Unrecognized trig function (%s)\n", line);
}
}
}
4096只是一个很大的圆形数字,所以任何人都不可能进入比这更长的线。如果他们确实进入了这样一条线,那么GIGO就会获得他们应得的东西(这将是一个礼貌的错误信息,表明他们输入的名称无法识别)。
这仍然不是很好的代码。剥离前导和尾随空格可能是合理的,并且可能将输入转换为小写,并且其中一条消息可能应该标识有效的函数名称。有可能重复使用代码循环,但是你需要一个函数来提示和读取响应等等。所有这些都增加了可用性,代价是代码更多的代码使初级程序员不必要地复杂化。
答案 1 :(得分:2)
您的if
语句无效,因为您将输入值x
与尚未设置的浮点值进行比较。我想你想做的是:
int x;
printf("Enter the trig function you wish to calculate\n");
printf("1=sine, 2=cosine, 3=tangent: ");
scanf("%d", &x);
if (x == 1)
{
// do sine
}
else if (x == 2)
{
// do cosine
}
else if (x == 3)
{
// do tangent
}
else
{
printf("I don't know that function.\n");
}
纪念性的愚蠢?诺。当你第一次开始编程时,这是一个很容易犯的错误。坚持下去。我们都去过那里。
答案 2 :(得分:1)
现在,这段代码:
float x;
float a, o, h;
float sine, cosine, tangent;
printf("Enter the trig function you wish to calculate: ");
scanf("%f", &x);
if(x == sine)
...将值读入x
,然后将其与sine
的当前值进行比较。遗憾的是,您尚未初始化sine
,因此它与某些未知的半随机值进行比较。
当你与cosine
和tangent
进行比较时,你会做更多相同的事情。
这些比较都没有一个有意义的结果(例如,它们可能很容易都是真的)。
猜测一下,您可能希望让用户输入一个字符串,并使用"sine"
将其与值"cosine"
,"tangent"
和strcmp
进行比较。
答案 3 :(得分:1)
我不确定你开始进入程序的是什么,但这就是你的错误所在。如果要输入字符数组(&#34;字符串&#34;),并且正在传递给x
,则无法将其与浮点值进行比较。此外,您的sine
,cosine
和tangent
变量没有值/尚未分配任何内容。要解决您的问题,请为变量分配一个数字,例如float sine = 1;
,并确保您在命令行中输入的内容传递给x
是一个数字。如果要输入&#34;余弦&#34;,并将该值传递给x
,则必须将x
变量更改为char数组,例如char[] x = ""
,然后将您的sine
,cosine
和tangent
变量更改为字符数组。如果您确实将变量更改为数组,请记住从scanf语句中删除&
,如下所示 - &gt; scanf("%s", x);
。