do-while循环不会退出C
Do-while loop wont exit c++
我的代码有一个小问题。.当我给0符号时,我的do-whe lile循环不会退出?我不知道为什么是因为我是新来的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;}
尝试更改为 while (symbol != '0');
在原始版本中,比较与数字0
,而不是符号'0'
。由于您的输入是char
类型的,因此无法满足条件。
您将编码字符输入到symbol
,而不是整数中。当您将cin
纳入char时,它将从用户捕获一个编码字符,而不是数值ze输入。
cin >> symbol;
什么是编码字符?
根据Wikipedia的说法,"代码是转换信息(例如字母,单词,声音,图像或手势(的规则系统,即另一种形式或表示形式。"代表人类语言中使用的字形,例如数字和计算机中的数字,有许多不同的方法。这些方式称为字符集或编码。字符集的示例是Shift-JIS,ASCII,Unicode和EBCDIC。这些编码能够说明 A
的字形等于数字65
。它使用它支持的每个字形这样做,以使每个字形都有一个唯一的数字。
这与我的问题有何关系?
好吧...假设您的环境使用ASCII字符集,并且您的用户输入0
,则您的程序将接收的数字是不是将是0
。相反,它将是48
。这是一个问题,因为您的程序正在检查数字0
。请注意,不同的环境可以具有不同的字符编码,具有不同的字形值。大多数字符集(但不是全部!(倾向于在基本拉丁字母和阿拉伯数字上同意ASCII。
} while (symbol != 0);
如何解决此问题?
解决方案非常简单。您要做的就是围绕您要检查的零报价。这将导致您的程序检查symbol
是否对用户输入的零字形的编码表示,而不是零的数值。
} while (symbol != '0');
我还需要知道什么?
char
数据类型实际上并不特别。就像其他数据类型一样。但是,它旨在存储字符值。char
型的变量是一个字节宽。如果一个字节是8位,则意味着signed char
可以存储从-128
到127
的任何数字。您可以将char
变量与C 中的任何其他标量整数类型完全相同。因此,您的char
实际持有的只是一个数字。仅此而已。
代码的定义来自https://en.wikipedia.org/w/index.php?title=code&Amp; oldid = 823846736。
- C++ 自动点击器未退出循环
- 使用 while 或 do while 退出循环
- 退出循环,除非未给出输入
- C++线程退出循环条件
- 在C++测试家庭作业问题中的字符串输入时无法退出循环(作为数据验证)
- 虽然具有多个 OR 条件的循环不退出循环
- 如果程序退出循环是goto已删除的本地变量
- 中断语句未退出循环
- 计算平均值,而不向退出循环添加负等级
- 使用键盘挂钩时无法动态退出循环
- 定义时间后退出C 循环
- 使用goto来干净地退出循环
- getchar 有什么问题(因为程序在没有检查的情况下退出循环)
- 尝试退出循环时,Ctrl+Z 不起作用
- 如何获取用户输入以退出循环
- 正在销毁线程并退出循环
- 中断语句不会退出循环
- 通过输入一个特定的字母c++来退出循环
- 在c++中,当输入不是unsigned时立即退出循环
- 编程原理和实践使用C++while-loop演练。找不到退出循环的方法