Do-while循环不会退出c ++

时间:2018-02-06 14:27:41

标签: c++

我的代码有点问题。当我给符号0时,我的do-while循环不会退出?我不知道为什么因为我是c ++的新手..我认为当符号= 0时,循环需要退出吗?

#include "stdafx.h"  
#include <iostream>
using namespace std;

int main(){
char symbol;
double num1, num2;
do {
    cout << "Give the operator (+,-,*,/,0 = quit) : ";
    cin >> symbol;

    cout << "Number 1 : ";
    cin >> num1;

    cout << "Number 2 : ";
    cin >> num2;

    if (symbol == '+')
        cout << "Addition : " << num1 + num2 << endl;

    else if (symbol == '-')
        cout << "Subtraction : " << num1 - num2 << endl;

    else if (symbol == '*')
        cout << "Multiplication: " << num1 * num2 << endl;

    else if (symbol == '/')
        cout << "Division : " << num1 / num2 << endl;

} while (symbol != 0);

cout << "See you";
system("pause");

return 0;}

2 个答案:

答案 0 :(得分:6)

尝试更改为while (symbol != '0');

在原始版本中,比较的是数字0,而不是符号'0'。由于您的输入类型为char,因此永远不会满足条件。

答案 1 :(得分:1)

您正在将编码字符输入symbol,而不是整数。当您cin加入char时,它将从用户捕获编码字符而不是数值ze输入。

cin >> symbol;

什么是编码字符?

根据维基百科,&#34;代码是一种规则系统,用于将信息(如字母,单词,声音,图像或手势)转换为另一种形式或表示形式。&#34;有许多不同的方式来表示人类语言中使用的字形,例如数字,作为计算机内的数字。这些方式称为字符集或编码。字符集的示例是SHIFT-JIS,ASCII,Unicode和EBCDIC。这些编码能够声明一个字形,比如A,等于数字65。它支持它支持的每个字形,以便每个字形都有一个唯一的数字。

这与我的问题有什么关系?

嗯...假设您的环境使用ASCII字符集,并且您的用户输入0,您的程序将收到的数字 NOT 将是{{ 1}}。相反,它将是0。这是一个问题,因为您的程序正在检查号码48。请注意,不同的环境可以使用不同的字符编码,并为不同的字形设置不同的值。然而,大多数字符集(但不是全部!)倾向于在基本拉丁字母和阿拉伯数字上与ASCII一致。

0

如何解决此问题?

解决方案非常简单。您所要做的就是用单引号将您要检查的零点包围起来。这将导致您的程序检查} while (symbol != 0); 用户输入的零字形的编码表示,而不是数值零。

symbol

我还需要知道什么?

} while (symbol != '0'); 数据类型实际上并不特别。它就像其他数据类型一样。但是,它用于存储字符值。类型char的变量是一个字节宽。如果一个字节是8位,这意味着char可以存储从signed char-128的任何数字。您可以将127变量与C ++中的任何其他标量整数类型完全相同。那么你char实际持有的只是一个数字。没什么,没什么。

代码的定义来自https://en.wikipedia.org/w/index.php?title=Code&oldid=823846736