【问题标题】:C++ char while( str != '\0')C++ char while(str != '\0')
【发布时间】:2015-08-24 16:26:07
【问题描述】:

我正在用 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 != '\0')
{       
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;
    }

【问题讨论】:

  • 它有什么“不工作”? “按应有的方式工作”对您意味着什么?目前你实际上并没有使用循环构造..你只是在创建一个无限循环(你没有提到)。
  • “因为据我所知,'\0' 是字符结尾的特定符号。” 抱歉,这一切对我来说都像是猜测编程。你在用哪本书?
  • 你是不是懒得去了解char和string的区别?毕竟这是您的程序无法运行的主要原因。
  • Ofc 我知道 char 和 strings 之间的区别,但我认为这个任务可以通过 while 循环和 chars 来解决。

标签: c++ char cin


【解决方案1】:

您的程序中有一些错误。一个很大的问题是您需要让用户输入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;
}

【讨论】:

  • 谢谢! Ofc 是这样的,我责怪 6 小时的直线驾驶对你的编程能力不是最好的;)
【解决方案2】:

但是我的 while 声明 while(str != '\0') 并没有像它应该做的那样工作。有人知道为什么吗?

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

另外,您只阅读了一次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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2012-01-09
    • 2011-04-21
    • 2021-10-07
    • 2022-06-15
    • 1970-01-01
    • 2015-10-06
    相关资源
    最近更新 更多