我的代码有点问题。当我给符号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;}
答案 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。