尝试从 getchar() 获取变量以将其值保留在简单的计算程序中
Posted
技术标签:
【中文标题】尝试从 getchar() 获取变量以将其值保留在简单的计算程序中【英文标题】:Trying to get a variable from getchar() to keep it's value in a simple calculation program 【发布时间】:2012-11-12 17:44:45 【问题描述】:我正在学习 C,我正在尝试创建这个程序,它要求依次输入一个运算符(+、-、*、%)、一个数字,然后是另一个数字,使用 scanf、printf 和 getchar( )。当我最后询问操作员时,它可以工作,但我必须先与操作员联系。
这是我想出的有效代码(但不按顺序排列):
char operator;
int numbers[2];
int result;
printf("Enter the first number:");
scanf("%9d", &numbers[0]);
printf("Enter the second number:");
scanf("%9d", &numbers[1]);
printf("Enter operation:");
getchar();
operator = getchar();
if (operator == '+')
result = numbers[0] + numbers[1];
else if (operator == '-')
result = numbers[0] - numbers[1];
else if (operator == '*')
result = numbers[0] * numbers[1];
else if (operator == '/')
result = numbers[0] / numbers[1];
else
result = 0;
printf("%d", result);
这是没有的代码:
printf("Enter operation:");
getchar();
char operator = getchar();
if (operator == '+')
result = numbers[0] + numbers[1];
else if (operator == '-')
result = numbers[0] - numbers[1];
else if (operator == '*')
result = numbers[0] * numbers[1];
else if (operator == '/')
result = numbers[0] / numbers[1];
else
result = 0;
printf("Enter the first number:");
scanf("%9d", &numbers[0]);
printf("Enter the second number:");
scanf("%9d", &numbers[1]);
printf("%d", result);
这个给出一个随机变量。
如果代码不在块中,请原谅我,我已尽我所能按照说明进行操作。
【问题讨论】:
【参考方案1】:赋值运算符的结果是“立即”计算的:表达式...
result = a + b;
...当a
或b
更改其值时,不会使result
更改其值。
这就是为什么你的第一个 sn-p 按计划工作,而你的第二个 sn-p 显示垃圾,因为你首先尝试计算一些垃圾值的一些二进制操作的结果(numbers
数组元素存储的内容 之前他们被分配了一些有用的东西),然后才尝试从用户那里获得一些输入。
关键是result
到目前为止已经有一些价值,而且这个价值不会改变 - 当然,除非你进行第二次分配。 )
修复这个程序很容易:只需将实际计算与输入部分分开即可。所以……
if (operator == '+')
result = numbers[0] + numbers[1];
else if (operator == '-')
result = numbers[0] - numbers[1];
else if (operator == '*')
result = numbers[0] * numbers[1];
else if (operator == '/')
result = numbers[0] / numbers[1];
else
result = 0;
... 将跟随所有printf/scanf
部分(显然打印结果的部分除外)。顺便说一句,您可以将switch
用于相同目的:
switch(operator)
case '+':
result = numbers[0] + numbers[1]; break;
case '-':
result = numbers[0] - numbers[1]; break;
case '*':
result = numbers[0] * numbers[1]; break;
case '/':
result = numbers[0] / numbers[1]; break;
default:
result = 0;
【讨论】:
谢谢,这是有道理的。我只是想知道,什么是关于 c 的基本书籍,它会告诉我在变量具有值之后必须执行这样的操作? C 编程语言足够基础吗?我已经阅读了其中的一些内容,但我想知道我需要知道的所有内容都会被教授,因为它在一开始就说明它假设了一些知识。 嗯,K&R 书本身就是一个非常坚实的学习基础——不仅是 C 语言,还有一般的 CS。你只需要给自己一些时间……完全消化它,我可以说。 ) 关键是,像往常一样,练习和实验——修改你的代码,改变它的一小部分,看看它会有什么不同,在我看来,这是学习 CS 的最佳方式。 至于变量存储关系而不是值的整个想法 - 好吧,你绝对不是一个人:事实上,名为reactive programming 的整个范式都是围绕它构建的。 )【参考方案2】:在第二部分中,您还没有读取 2 个数字的值,但您正在对它们进行操作。
顺便说一句:
而不是全部
if (operation == '+')
// etc
你可以查看 switch 语句。
switch(operator)
case '+'
number[0] + number[1];
break;
// etc
【讨论】:
【参考方案3】:你好像有一个额外的电话给getchar()
printf("Enter operation:");
getchar();
char operator = getchar();
应该是
printf("Enter operation:");
char operator = getchar();
否则您可能会错过运算符,并且您需要在进行数学运算之前先阅读数字。
【讨论】:
以上是关于尝试从 getchar() 获取变量以将其值保留在简单的计算程序中的主要内容,如果未能解决你的问题,请参考以下文章
如何从具有特定值的变量和数据库中获取数据以将其计入laravel上的图表
PHP GD - 水平居中对齐文本并减小字体大小以将其保留在图像内
Angular - JSX 和模板文字中的转义变量以将其用作参数