C++ 字符 while( str != '\0')

C++ char while( str != '\0')

我正在用 C++ 构建一个非常简单的程序。该程序是这样工作的,您将输入一些随机数(这个数字可以是任何合理的大小)因此,例如,如果您输入 23215,您将得到 87890 作为输出。但是我在这里的 while 语句“while(str != '\0') 没有像它应该做的那样工作。有人知道为什么吗?因为据我所知,'\0' 是字符结尾的特定符号。(我知道 str 对于 char 来说是个坏名字,我现在懒得改了)

int main()
{
char str;
cout << "Enter a coded message: ";
cin >> str;
cout << endl;
cout << "Decoded message: ";
while (str != '[=10=]')
{       
switch (str)
        {
        case '0': cout << "5";
            break;
        case '1': cout << "9";
            break;
        case '2': cout << "8";
            break;
        case '3': cout << "7";
            break;
        case '4': cout << "6";
            break;
        case '5': cout << "0";
            break;
        case '6': cout << "4";
            break;
        case '7': cout << "3";
            break;
        case '8': cout << "2";
            break;
        case '9': cout << "1";
            break;
        }
    }
    cout << endl;
    }

But my while statement here while(str != '[=12=]') aint working like it's supposed to do. Someone knows why?

当您从输入流中读取一个字符时,它永远不会等于 '[=13=]'。这是逻辑上的第一个错误。

此外,您只阅读了 str 一次。除了输入的第一个字符之外,您没有阅读任何内容。

将您的代码更改为:

int main()
{
   int ch;
   cout << "Enter a coded message: ";
   cout << endl;
   cout << "Decoded message: ";
   while ( (ch = cin.get()) != EOF )
   {       
      switch (ch)

如果想在读完第一行的所有字符后停止阅读,可以使用:

int main()
{
   int ch;
   cout << "Enter a coded message: ";
   cout << endl;
   cout << "Decoded message: ";
   while ( (ch = cin.get()) != EOF && ch != '\n' )
   {       
      switch (ch)

您的程序中存在一些错误。一个很大的问题是您需要让用户输入 string 而不是 char。看看下面的代码

#include <iostream>
#include <string>
using namespace std;

int main() {
    string input;

    cout << "Enter a coded message: "; 
    cin >> input;

    cout << "Decoded message: ";
    for (int i = 0; i < input.size(); ++i) {
        switch (input[i]) {
            case '0': cout << "5";
                break;
            case '1': cout << "9";
                break;
            case '2': cout << "8";
                break;
            case '3': cout << "7";
                break;
            case '4': cout << "6";
                break;
            case '5': cout << "0";
                break;
            case '6': cout << "4";
                break;
            case '7': cout << "3";
                break;
            case '8': cout << "2";
                break;
            case '9': cout << "1";
                break;
            default: 
                      cout << "X";
                      break;
        }
    } 

    cout << endl;

    return 0;
}