cin>>有什么问题num1,num2?

时间:2015-10-22 18:35:05

标签: c++

#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个操作数之后,这是一些问题。有什么建议吗?

3 个答案:

答案 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错误。这样做:

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>

最后,我建议您始终初始化变量,因为您可能会遇到使用单位化变量并获得未定义行为的情况。