我的程序运行不正常

时间:2015-09-14 22:09:12

标签: c++

#include <iostream>

using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */


string numString(int k)
{
string str;

switch (k) {
    case 0 : str ="ZERO"; break;
    case 1 : str ="ONE"; break;
    case 2 : str ="TWO"; break;
    case 3 : str ="THREE"; break;
    case 4 : str ="FOUR"; break;
    case 5 : str ="FIVE"; break;
    case 6 : str ="SIX"; break;
    case 7 : str ="SEVEN"; break;
    case 8 : str ="EIGHT"; break;
    case 9 : str ="NINE"; break;
}

return str;
}

int main(int argc, char** argv) {


int value;
int digit;

cout << "Enter a number: ";
cin >> value;


while (value > 0 )
{
    digit = value % 10;
    value = value / 10;
    cout << numString(value) << endl;


}
return 0;
}

我的程序应该提示用户读取该值的整数值,并输出每个数字的等效字 例如,如果输入“9502”,它将输出“NINE FIVE ZERO TWO” 然而我的只输出“NINE ZERO”然后停止。我无法弄清楚我做错了什么,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

  

然而我的只输出&#34; NINE ZERO&#34;然后停下来。

这就是你告诉它要做的事情!

while (value > 0 )

您必须找到一些其他方式来发出&#34;终止&#34;条件,如果零应该是有效的。

传统上,我们让系统自己的文件结束信令为我们处理,因此我们不必保留&#34;保留&#34;一些其他有效的输入并将其用作信号标志。

while (cin >> value) {
    digit = value % 10;
    value = value / 10;
    cout << numString(value) << endl;
}

这会修复你的循环,虽然不幸的是你的数学仍然是错误的,你的输出不是你想要的。实际上,根本不使用您的digit变量。我不打算在这里使用一种算法:你必须在纸上解决如何实现业务逻辑的问题。 :)

答案 1 :(得分:1)

这是使用输入9502对您的程序进行的分析。

迭代1,在main中:

(新)value = 9502 / 10;
(新)digit = 9502 % 10;
值== 950;
digit == 2;
调用numString( 950 );
//注意:numString中没有950的情况,因此返回一个空字符串。

迭代2,主要:

(新)value = 950 / 10;
(新)digit = 950 % 2;
值== 95;
digit == 0;
调用numString( 95 );
//注意:numString中没有95的情况,因此返回一个空字符串。

上述迭代和变量值可以用pen&amp;获得。纸(或记事本)。您也可以使用名为调试器的内容执行相同的操作。

我希望这会有所帮助。