#include <iostream>
using namespace std;
int main() {
char choice;
int solution, num1, num2;
cout << "Menu";
cout << "\n========";
cout << "\n+) Add";
cout << "\n-) subtract";
cout << "\n*) Multiplication";
cout << "\n/) Division";
cout << "\nx) Exit";
cout << endl;
cout << "\nEnter your choice: ";
cin >> choice;
switch (choice) {
case '+':
cout << "\nEnter the operands: ";
cin >> num1, num2;
solution = num1 + num2;
cout << num1 << '+' << num2 << '=' << solution;
break;
case '-':
cout << "\nEnter the operands: ";
cin >> num1, num2;
solution = num1 + num2;
cout << num1 << '-' << num2 << '=' << solution;
break;
case '*':
cout << "\nEnter the operands: ";
cin >> num1, num2;
solution = num1 * num2;
cout << num1 << '*' << num2 << '=' << solution;
break;
case '/':
cout << "\nEnter the operands: ";
cin >> num1, num2;
solution = num1 / num2;
cout << num1 << '/' << (double)num2 << '=' << solution;
break;
case 'x':
case 'X':
cout << "\nExiting....";
return 0;
break;
default:
cout << "\nInvalid choice";
}
return 0;
}
所以我正在编写一个允许用户输入操作的程序。它几乎是一个计算器!我必须使用switch语句。我觉得我很亲密,但现在我已经打了一堵砖墙。在用户启动操作之后,程序运行并说它进入操作数,然后它应该用输入的数字进行操作并显示它们。在用户输入程序崩溃的2个操作数之后,这是一些问题。有什么建议吗?
答案 0 :(得分:8)
cin >> num1, num2;
此语法不适合您的需要。要链接,请使用
cin >> num1 >> num2;
如果您使用警告进行编译,则会被编译器通知您
int a{}, b{};
std::cin >> a, b;
给出错误:
warning: right operand of comma operator has no effect [-Wunused-value]
std::cin >> a, b;
整个语句被解析为
((std::cin >> a), b);
由两个以逗号分隔的表达式组成。在这种情况下,b
没有任何效果。如果您在上面的std::cin
行之后打印变量,那么0
b
答案 1 :(得分:3)
cin >> num1, num2;
这使得所有变量都未初始化。尝试在没有先前分配的情况下从中读取它们是未定义的行为。
cin >> num1
这一行的假设意图是读入两个变量。真正发生的是comma operator的应用,左侧是操作数num2
,右侧是num1
。
评估左侧并将值写入num2
;第二个操作数无效,并使cin >> num1;
处于未初始化状态。
就像你写了solution = num1 + num2;
。
cin >> num1; cin >> num2;
发生上述未定义的行为,导致整个程序无效。
您可以按如下方式解决问题:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("form").submit(function(){
alert("Submitted");
});
});
</script>
</head>
<body>
<table>
<tr>
<th class="heading">
Sl No.
</th>
<th class="heading">
Order Id
</th>
<th class="heading">
Date
</th>
<th class="heading">
Process
</th>
<th class="heading">
Curr Status
</th>
<th class="heading_blank">
Change Status
</th>
<th class="heading_blank">
</th>
</tr>
<?php
include "config.php";
$checkbox = isset($_POST['checked_box']);
if($checkbox == 1){
$Query="SELECT * FROM `order` ORDER BY sl_no DESC";
}else{
$Query="SELECT * FROM `order` ORDER BY sl_no ASC";
}
$result=mysql_query($Query);
while($row = mysql_fetch_object($result)) {
?>
<tr>
<td class="content">
<?php echo $row->sl_no; ?>
</td>
<td class="content">
<?php echo $row->order_id; ?>
</td>
<td class="content">
<?php echo $row->pick_date; ?>
</td>
<td class="content">
<?php echo $row->process; ?>
</td>
<td class="content">
<?php echo $row->status; ?>
</td>
<form action="update_status.php?order_id=<?php echo $row->order_id; ?>" method="POST">
<td>
<div class="select-style">
<select name="status">
<option value="<?php echo $row->status; ?>"><?php echo $row->status; ?></option>
<option value="Step_1">Step_1</option>
<option value="Step_2">Step_2</option>
<option value="Step_3">Step_3</option>
<option value="Step_4">Step_4</option>
</select>
</div>
</td>
<td>
<input type="submit" class="order_details_btn" value="Change">
</td>
</form>
</tr>
<?php } ?>
</table>
</body>
</html>
答案 2 :(得分:1)
cin >> num1 >> num2;
(让用户知道用一个或两个c :)键入的内容总是很好的。
您只能在cin >> choice
之后和switch
之前进行一次cin。它将为您节省一些线条并尊重信条:
不要重复自己。
您不检查除以零。如果用户尝试num1 / 0
,您的程序将崩溃。
return 0
中的case 'X'
不是必需的,你的休息时间也不会到达,所以你可以删除返回,然后你会遇到主要的return 0
,保持开关不错和干净。
在case '/'
num2
中,double
投放到int
。我不明白为什么要打印double
投放到double
的结果。我的猜测是你希望结果是solution = num1 / (double)num2;
。在这种情况下,你会这样做:
solution
并将double
更改为 <SetDirectory Id="ProgramFilesFolder" Value="C:\Program Files (x86)\"></SetDirectory>
。
最后,我建议您始终初始化变量,因为您可能会遇到使用单位化变量并获得未定义行为的情况。