do-while循环不会退出C

Do-while loop wont exit c++

本文关键字:退出 循环 do-while      更新时间:2023-10-16

我的代码有一个小问题。.当我给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可以存储从-128127的任何数字。您可以将char变量与C 中的任何其他标量整数类型完全相同。因此,您的char实际持有的只是一个数字。仅此而已。

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